簡體   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