1

私は現在 Ember.js を評価しているため、小さなサンプル アプリを作成しています。現在、これまでのところすべてが非常にスムーズに進んでいましたが、最後の小さな問題を修正できないようです.

ルート フィルム経由で通常どおりアプリにアクセスすると、すべてが期待どおりに機能します。映画のリストが表示されます。setupController映画をクリックすると、映画のリストのすぐ下にあるフックを介して映画の詳細がロードされます。それはすべて問題ありません。

ここで私の問題が発生します: URL を介して映画の詳細に直接アクセスできるようにしたいのですが、どういうわけかこの場合、映画の詳細を取得するために別の要求が発生しますundefinded。私が理解している限りでは、それがmodelフックです。

model推測しかできませんが、実行されているのはフックだと思います。

誰かが私が犯しているおそらく明白な間違いを指摘できますか? 一方で、ここまで書いたコードは「正しい」のでしょうか。または、これを行うより良い方法はありますか?

(映画の詳細をレンダリングするために使用する悪い方法を認識しています。{{#each}}タグを削除し、応答をfilm変数に割り当てる方法を変更します。

サンプル アプリへのリンク: http://jsbin.com/ewiN/1#/films

アップデート

さて、私は本当に混乱しています。私はほとんどそれを機能させています。うまくいけば、誰かが私にそれを指摘することができます.setupControllerフック。FilmDetailsしかし、リンクをクリックして を適切にロードするには、そのフックが必要ですFilmDetails

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

フィードバックをお寄せいただきありがとうございます。よろしくレト

4

1 に答える 1

1

内部では ember が jquery の代わりにこの promise api を使用するためjQuery.getJSON、 useの代わりに を使用します。Ember.RSVP.Promise両方を使用すると、矛盾が生じる可能性があると思います。

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

于 2013-08-22T12:54:16.780 に答える