我想删除我在当前点注册的观察者。假设我有以下组件:
export default Ember.Component.extend({
observeSomeProp: function() {
//do something
}.observes('someProp'),
obserOtherProp: function() {
if( condition ) {
//remove observeSomeProp
}
}.observes('otherProp')
});
我正在阅读文档,removeObserver函数需要三个参数' key',' target'和'方法'。我想这个'方法'对于给定的示例,参数将是observeSomeProp
,但是'键'和'目标'?
答案 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);
}
});
它可能看起来像更多代码,但willInsertElement
和willDestroyElement
可用于组件中的许多其他内容,如果您觉得它太拥挤,您可以使用mixins进行优化