删除Ember组件中的观察者

时间:2015-03-25 09:31:09

标签: ember.js

我想删除我在当前点注册的观察者。假设我有以下组件:

export default Ember.Component.extend({
    observeSomeProp: function() {
        //do something 
    }.observes('someProp'),

    obserOtherProp: function() {
       if( condition ) {
           //remove observeSomeProp
       }
    }.observes('otherProp')  
});

我正在阅读文档,removeObserver函数需要三个参数' key',' target'和'方法'。我想这个'方法'对于给定的示例,参数将是observeSomeProp,但是'键'和'目标'?

1 个答案:

答案 0 :(得分:2)

你对“方法”的理解是正确的。 param,但我不认为你可以删除一个像这样硬编码到组件中的观察者(据我所读过......)。至于其他人,关键是'将是您想要观看的属性,因此' someProp'以及' target'将是您正在使用的视图/组件空间,因此只需this

尝试将您的观察者添加到willInsertElement并在willDestroyElement中删除它们:

export default Ember.Component.extend({
  willInsertElement: function () {
    var self = this;

    // Add observers
    self.addObserver('self.someProp', self, self.propObserver);
    self.addObserver('self.otherProp', self, self.otherPropObserver);

    return self.super();
  },

  propObserver: function () {
    //Do something
  },

  otherPropObserver: function () {
    //Do something else
    if( condition ) {
      //remove propObserver
      var self = this;
      this.removeAnObserver('self.someProp', self, self.propObserver);
    }
  },

  // This is the method that's removing all the observers
  removeAnObserver: function (key, target, method) {
    // Remove observer
    self.removeObserver(key, target, method);
  },

  willDestroyElement: function () {
    var self = this;

    //remove any observers you set in willInsertElement
    this.removeAnObserver('self.someProp', self, self.propObserver);
    this.removeAnObserver('self.otherProp', self, self.otherPropObserver);
  }
});

它可能看起来像更多代码,但willInsertElementwillDestroyElement可用于组件中的许多其他内容,如果您觉得它太拥挤,您可以使用mixins进行优化