Вы правы в параметре «метод», но я не думаю, что вы можете удалить наблюдателя, который жестко закодирован в компонент, подобный этому (насколько я читал ...). Что касается остальных, «ключ» - это свойство, которое вы хотите посмотреть, поэтому «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
можно использовать для многих других вещей в компоненте, и вы можете оптимизировать работу с микшинами, если чувствуете, что это слишком многолюдно.
Thx за отличное объяснение! –