灰烬 - 观察创建/删除记录

时间:2014-07-27 15:51:57

标签: ember.js

假设我有2套独立的控制器/模型:DogCat

现在,每当我创建新的Cat记录(或删除现有记录)时,我希望Dog控制器观察记录的创建/删除以及创建新的Cat记录时希望它发起一些动作(例如console.log('Bark!'))。

在这种情况下,我不想直接从Cat控制器向Dog控制器发送操作;我希望Dog控制器对自己负责。如果有可能,有没有办法从Dog控制器的角度来判断是创建还是删除了记录?

任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:1)

使用Ember数据

在狗/猫控制器上,您可以创建对猫/狗集合的引用。

让我们假设您正在创建狗控制器

App.DogRoute = Em.Route.extend({
  model: function(){
    return this.store.find('dog');
  },
  setupController: function(controller, model){
    this._super(controller,model);
    controller.set('cats', this.store.all('cat'));
  }
});

App.DogController = Em.ArrayController.extend({
  catsChanged: function(){

  }.observes('cats')
});

此外,您可以添加数组观察者并观察项目的变化情况。

App.DogRoute = Em.Route.extend({
  model: function(){
    return this.store.find('dog');
  },
  setupController: function(controller, model){
    this._super(controller,model);
    var all = this.store.all('cat');
    controller.set('cats', all);
    all.addArrayObserver(controller);
  }
});

App.DogController = Em.ArrayController.extend({
  arrayWillChange: function(array, start, removeCount, addCount) {
    console.log(arguments);
  },
  arrayDidChange: function(array, start, removeCount, addCount) {
    console.log(arguments);
  }
});

使用需求并观看控制器

App.CatsController = Em.ArrayController.extend({
  needs: 'dog',
  dogs: Em.computed.alias('controllers.dogs'),
  dogsChanged: function(){
    console.log('dogs changed');
  }.observes('dogs.[]')
});


App.DogsController = Em.ArrayController.extend({
  needs: 'cat',
  cats: Em.computed.alias('controllers.cats'),
  catsChanged: function(){
    console.log('cats changed');
  }.observes('cats.[]')
});