你对'方法'参数是正确的,但我不认为你可以删除一个硬编码到像这样的组件的观察者(据我读过的...)。至于其他人,'钥匙'将是你想要观看的财产,所以'someProp'和'目标'将是你正在工作的视图/组件空间,所以你的情况只是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
可用于在您的组件有很多其他的东西,如果你觉得它太拥挤,你可以使用mixin进行优化。
Thx为优秀的解释! – 2015-03-25 16:33:06