gpt4 book ai didi

javascript - 带有嵌套路由的 Ember.js model- 和 setupController-hook

转载 作者:行者123 更新时间:2023-11-28 02:01:33 25 4
gpt4 key购买 nike

我目前正在评估 Ember.js,因此我正在构建一个小型示例应用程序。目前到目前为止一切都很顺利,但现在我似乎无法解决我最后一个小问题。

当我通过路线电影正常访问应用程序时,一切都按预期进行。显示电影列表。现在,当我单击一部影片时,影片的详细信息将通过影片列表下方的 setupController Hook 加载。就这样就好了。

我的问题来了:我希望能够直接通过 url 访问电影详细信息,但在这种情况下,不知何故,会触发另一个请求来获取电影详细信息,其值为 undefinded 。据我了解,这是 model Hook 。

我只能猜测,但我认为正在执行的是 model 钩子(Hook)。

有人可以指出我可能犯的明显错误吗?另一方面,我到目前为止编写的代码“正确”吗?或者有更好的方法吗?

(我知道我用来渲染电影细节的糟糕方式。我将删除 {{#each}} 标签,并更改将响应分配给 电影变量。

这里是示例应用程序的链接:http://jsbin.com/ewiN/1#/films

更新

好吧,现在我真的很困惑。我几乎可以正常工作了,希望有人能向我指出,因为这是一项非常简单的任务,但如果不非常了解 ember,这几乎是不可能完成的......通过 url 访问应用程序时,仅当我删除 setupController Hook 时它才有效。但我需要那个钩子(Hook),在单击链接时加载 FilmDetails 以正确加载 FilmDetails

http://jsbin.com/ewiN/16#/films/tt0100669

非常感谢您的反馈!问候雷托

最佳答案

不要使用jQuery.getJSON,而是使用Ember.RSVP.Promise,因为ember内部使用这个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而不是一个对象,所以我们需要使用模型钩子(Hook),因为它要等到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") };
}
});

是默认值。

这是最终结果http://jsbin.com/ewiN/15/edit

关于javascript - 带有嵌套路由的 Ember.js model- 和 setupController-hook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18373576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com