我在ember中有一个简单的基于类的帮助器,只要属性发生变化,就会添加一个观察者来调用.recompute
。由于没有机会调用removeObserver
(因为助手上没有破坏...方法),将继续使用助手累积观察者' cruft'随着时间的推移并导致性能泄漏?
以下是代码:帮助程序可以在模板中直接获取服务或属性,而不必将服务放入模板后面的组件或控制器代码中:
export default Ember.Helper.extend({
someService: Ember.inject.service(),
compute: function([propName]) {
const svc = this.get('svc');
if (Ember.isPresent(propName)) {
svc.addObserver(propName, this, 'recompute');
}
return propName ? get(svc, propName) : svc;
},
});