我有两个模型,与async hasMany关系连接:
App.Car = DS.Model.extend({
model: DS.attr('string'),
passengers: DS.hasMany('passenger', { async: true }
});
和
App.Passenger = DS.Model.extend({
name: DS.attr('string')
});
如何观察汽车乘客的装载状态?我试过了:
App.CarPassengerController = Em.ObjectController.extend({
needs: ['cars'],
carsBinding: 'controllers.cars',
loadObserver: function() {
console.log('passengers loading status of changed');
}.observes('cars.@each.passengers.isFulfilled')
});
这不起作用,因为观察者只在车辆装载后才被解雇,但是在承诺完成后才会被解雇。 (我知道它们已经完成,因为这在Ember Inspector中有说明。)
是否有人遇到类似问题并找到了解决方案?谢谢!
答案 0 :(得分:2)
还有一种比这更好的方式(我也有兴趣知道),但到目前为止,这就是我一直在做的(真的是黑客):
setupController: function(controller, model) {
this._super(controller, model);
var cars = model.get('cars')
var carCount = cars.get('length')
var carIterator = 0
cars.forEach(function(car){
car.get('passengers').then(function(passengers){
carIterator++;
if(carIterator == carCount) {
// all passengers from all cars have been loaded
controller.set('passengers_loaded', true)
}
})
})
}