我有两个多对多的模型。它们在我的应用程序的第一页上使用,我无法加载它们。
两个模型都只有少量项目(<200),我想在一个findAll
请求中完全加载两个模型。但是随着第一个模型的加载,Ember 开始逐项获取第二个模型的缺失数据。如果我尝试单独加载模型,我会收到一个错误,并且必须{async:true}
为hasMany
attr 设置。但出于某种原因,Ember 无法识别第二个模型请求的 json。
无论如何要获取两个模型并等到两个模型都加载后再继续?
谢谢。
我有两个多对多的模型。它们在我的应用程序的第一页上使用,我无法加载它们。
两个模型都只有少量项目(<200),我想在一个findAll
请求中完全加载两个模型。但是随着第一个模型的加载,Ember 开始逐项获取第二个模型的缺失数据。如果我尝试单独加载模型,我会收到一个错误,并且必须{async:true}
为hasMany
attr 设置。但出于某种原因,Ember 无法识别第二个模型请求的 json。
无论如何要获取两个模型并等到两个模型都加载后再继续?
谢谢。
我猜你正在做一些事情:
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.all
和Ember.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);
}
});