我有一个必须对视口更改做出反应的组件。
天真的方法是绑定一个jQuery resize监听器,但这可能会弄乱Ember运行循环。
最佳做法是使用Ember.run.bind
这很好用,但我想知道一旦组件不再活动,如何取消绑定这样的事件?
答案 0 :(得分:9)
想出来了。 Ember.run.bind
实际上并不需要unbind方法,你可以解除绑定jQuery事件。
代码示例:
export default Ember.Component.extend({
_resizeListener: null,
didInsertElement: function(){
// keep a reference to the event listener
this._resizeListener = Ember.run.bind(this, this.preformLayout);
Ember.$(window).on('resize', this._resizeListener);
},
willDestroy: function(){
if(this._resizeListener){
// whenever component gets destroyed, unbind the listener
Ember.$(window).off('resize', this._resizeListener);
}
}
});