一起请求两个模型

Nic*_*n16 16 ember.js ember-data

我有两个很多很多的模型.他们在我的应用程序的第一页上使用,我在加载它们时遇到问题.

两个型号只有少量项目(<200),我想在每个findAll请求中完全加载两个模型.但是当第一个模型被加载时,Ember开始逐项获取第二个模型的缺失数据.如果我尝试单独加载模型,我会收到错误并且必须设置{async:true}hasManyattr.出于某种原因,Ember没有认识到第二个模型的请求的json.

无论如何都要获取两个模型并等到两个负载再继续之前?

谢谢.

Pan*_*agi 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)
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

model路由挂钩返回的任何承诺将导致路由器暂停转换,直到履行该承诺.在上述情况下,路由器会等待posts请求解决.因此,我们需要指示路由器等待两个请求完成.

输入Ember.RSVP.allEmber.RSVP.hash.这些方法允许将多个promise合并为一个.他们返回一个新的承诺,只有在所有个人承诺得到满足时才能履行.以下是您如何使用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);
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 在#link-to`的情况下,这是如何工作的,其中`model`钩子没有被调用? (6认同)