2015-06-11 4 views
3

У меня есть компонент, который должен реагировать на изменения в видовом экране.Отключить событие, связанное с Ember.run.bind?

Наивный подход состоит в том, чтобы просто связать прослушиватель resize jQuery, но это может испортить цикл цикла Ember.

Лучше всего подход заключается в использовании Ember.run.bind

Это прекрасно работает, но мне интересно, как не отвязать такое событие, как только компонент больше не работает?

+0

Почему ур контроллер реагирует на изменения области просмотра. Компоненты или представления - это то, что обычно должно реагировать на изменения в видовом экране. Представления обеспечивают hook, как willDestroyElement, чтобы отменить события. Для справки https://github.com/truenorth/ember-resize https://github.com/taras/ember-resize-mixin – blessenm

+0

Отредактировано для чтения «компонент» вместо «контроллера». Вопрос остается тем же. Как отключить событие, когда оно связано через 'Ember.run.bind'? – bummzack

ответ

8

Понял это. 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); 
    } 
    } 
}); 
Смежные вопросы