16

多対多の 2 つのモデルがあります。それらはアプリの最初のページで使用されていますが、読み込みに問題があります。

findAll両方のモデルには少数のアイテム (<200) しかありません。両方のモデルをそれぞれ 1 つのリクエストで完全にロードしたいと思います。しかし、最初のモデルが読み込まれると、Ember は 2 番目のモデルの欠落データを項目ごとに取得し始めます。モデルを個別にロードしようとすると、エラーが発生し、属性を設定{async:true}する必要がありますhasMany。ただし、何らかの理由で、Ember は 2 番目のモデルのリクエストの json を認識していません。

とにかく両方のモデルをフェッチし、両方がロードされるまで待ってから続行することはありますか?

ありがとう。

4

1 に答える 1

44

私はあなたが次の行に沿って何かをしていると推測しています:

App.IndexRoute = Ember.Route.extend({
  model: function() {
    // Fetch the records of the first model 
    return this.store.find('post');
  },

  setupController: function(controller, model) {
    this._super(controller, model);
    this.store.find('comment').then(function(comments) {
      controller.set('comments', comments)
    });
  }
});

ルートのフックからプロミスが返さmodelれると、ルーターはそのプロミスが満たされるまで遷移を一時停止します。上記の場合、ルーターはリクエストが解決されるまで待機しますpostsしたがって、両方のリクエストが完了するまで待機するようルーターに指示する必要があります。

と を入力Ember.RSVP.allEmber.RSVP.hashます。これらのメソッドを使用すると、複数のプロミスを 1 つにマージできます。これらは、個々のプロミスがすべて満たされたときにのみ満たされる新しいプロミスを返します。これを行う方法は次のEmber.RSVP.hashとおりです。

App.IndexRoute = Ember.Route.extend({
  model: function() {
    var store = this.store;
    return Ember.RSVP.hash({
      posts: store.find('post'),
      comments: store.find('comment')
    });
  },

  setupController: function(controller, models) {
    var posts = models.posts;
    var comments = models.comments;

    controller.set('content', posts);
    controller.set('comments', comments);
  }
});
于 2013-10-12T09:38:22.723 に答える