删除 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);
}
});
它看起来可能有更多的代码,但是 willInsertElement
和 willDestroyElement
可以用于组件中的很多其他东西,如果你觉得它变得更好,你可以使用 mixins 进行优化太拥挤了。
我想删除我在当前点注册的观察者。假设我有以下组件:
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);
}
});
它看起来可能有更多的代码,但是 willInsertElement
和 willDestroyElement
可以用于组件中的很多其他东西,如果你觉得它变得更好,你可以使用 mixins 进行优化太拥挤了。