[英]Ember.js model- and setupController-hook with nested routes
我目前正在评估Ember.js,因此正在构建一个小型示例应用程序。 目前,到目前为止一切都进展顺利,但是现在我似乎无法解决我的最后一个小问题。
当我通过路线影片正常访问该应用程序时,一切都会按预期进行。 显示电影列表。 现在,当我单击影片时,影片的详细信息通过位于影片列表下方的setupController
钩子加载。 一切都很好。
这是我的问题:我希望能够直接通过url访问影片详细信息,但是在这种情况下,会以某种方式触发另一个请求来获取影片详细信息,其值为undefinded
。 据我了解,这是model
挂钩。
我只能猜测,但是我认为这是正在执行的model
挂钩。
有人可以指出我可能犯的明显错误吗? 另一方面,我到目前为止编写的代码是否“正确”? 还是有更好的方法呢?
(我知道我用来渲染胶片细节的不好方法。我将删除{{#each}}
标签,并更改将响应分配给film
变量的方式。
这里是示例应用程序的链接: http : //jsbin.com/ewiN/1#/films
UPDATE
好吧,现在我真的很困惑。 我几乎可以正常工作了,希望有人可以向我指出,因为这是一个简单的任务,但似乎很难完全不了解余烬,这似乎是不可能的...通过url访问该应用程序时,仅当我将其删除时,它才有效setupController
挂钩。 但我需要一个钩子,加载FilmDetails
上点击到链接到正确加载FilmDetails
。
http://jsbin.com/ewiN/16#/films/tt0100669
非常感谢您的反馈! 问候雷托
而不是使用jQuery.getJSON
,请使用Ember.RSVP.Promise
,因为内部余烬使用此promise API而不是jquery。 我认为同时使用这两种方法可能会导致不一致。
return new Ember.RSVP.Promise(function(resolve, reject) {
var films = [];
jQuery.getJSON("http://www.omdbapi.com/?s=" + searchTerm, function (response) {
$.each(response.Search, function (index, value) {
films.pushObject(Kitag.Films.create({
title: value.Title,
id: value.imdbID
}));
});
}).fail(reject);
resolve(films);
});
因为我们要返回一个Promise而不是一个对象,所以我们需要使用模型挂钩,因为它要等到Promise解析为呈现模板之后再进行。
Kitag.FilmsRoute = Ember.Route.extend({
model: function() {
return Kitag.Films.getMovies('spiderman');
}
});
我删除了Kitag.FilmRoute
,因为期望的是:
Kitag.FilmRoute = Ember.Route.extend({
model: function(params) {
return Kitag.Film.find(params.id)
},
serialize: function (model) {
return { film_id: model.get("id") };
}
});
是默认值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.