Ответ 1
Я предполагаю, что вы делаете что-то вроде:
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
. Эти методы позволяют объединить несколько promises в один. Они возвращают новое обещание, которое выполняется только тогда, когда выполняются все индивидуальные promises. Вот как вы это делаете с помощью 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);
}
});