识别加载hasMany关系何时完成

时间:2014-03-06 16:19:27

标签: ember.js promise

我有两个模型,与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中有说明。)

是否有人遇到类似问题并找到了解决方案?谢谢!

1 个答案:

答案 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)
            }
        })
    })
}