删除 Ember 组件中的观察者

Remove an observer in Ember component

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

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

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

我正在阅读文档,removeObserver 函数需要三个参数 'key'、'target' 和 'method'。对于给定的示例,我想 'method' 参数将是 observeSomeProp,但是 'key' 和 'target' 呢?

您对 'method' 参数的看法是正确的,但我认为您不能删除像那样硬编码到组件中的观察者(据我所知...)。至于其他的,'key'就是你想看的属性,所以'someProp','target'就是view/componentspace 你正在工作,所以你的情况只是 this

尝试将您的观察者添加到 willInsertElement and removing them in 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 进行优化太拥挤了。