2016-08-09 11 views
0

Also habe ich einen jquery Eventhandler an window angehängt, ich entferne ihn in willDestroyElement hook, aber das Ereignis direkt nach dem Aufruf des Callbacks aufzurufen sowieso (Hinzufügen einiger Verzögerung in Test-Fixes Sachen, aber es scheint nicht richtig ...)Ember.js: das Entfernen des Ereignishandlers in `willDestroyElement` passiert nicht rechtzeitig

_detachHandlers: Ember.on('willDestroyElement', function() { 
    $(window).off('resize');  
    }) 

Test:

this.render(hbs` 
    {{#if show}} 
     {{#my-component timesCalled=(mut timesCalled)}} 
     <button class='button'>Click me!</button> 
     {{/my-component}} 
    {{/if}} 
    `); 
    assert.ok(this.$('button.button').length, 'renders button'); 
    run(() => $(window).trigger('resize')); 
    assert.equal(this.get('timesCalled'), 1, "callback worked one time"); 

    run(() => this.set('show', false)); 
    assert.notOk(this.$('button.button').length, 'component disappears'); 
    run(() => $(window).trigger('resize'));  
    assert.equal(this.get('timesCalled'), 1, "callback detached and counter doesn't change"); 

ich glaube, ich brauche etwas in Lauf wickeln, aber was? Versuchte viele Ansätze, die sinnvoll schienen, aber nichts funktionierte.

Antwort

1

Sie .on nicht direkt die willDestroyElement Methode verwenden, um Ihre Zuhörer zu lösen:

willDestroyElement() { 
    Ember.$('window').off('resize'); 
    return this._super(...arguments); 
} 
+0

machte keinen Unterschied –

0

Es stellte sich heraus, dass willDestroyElement Brände nach Objekt der Komponente wird immer zerstört (oder zerstören Zustand eintritt), so dass, wenn mein Event-Handler tut etwas mit dem Zustand der Komponente, die Lösung könnte auch isDestroying und isDestroyed Flags zu überprüfen.

Verwandte Themen