繁体   English   中英

具有嵌套路由的Ember.js模型和setupController挂钩

[英]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") };
    }
});

是默认值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM