2016-06-24 5 views
0

In Komponentencode wie:Ember.js: Wie kann das Ereignis im Komponententest nicht gebunden werden?

didInsertElement() { 
    this.$('.something').on(//...); 
}, 
willDestroyElement() { 
    this.$('.something').off(//...); 
} 

Sie haben die Methode für die Ereignisse des Abfragens $._data(this.$('.something')[0], 'events'), aber wenn sie zerstört werden, wird das Element weg. Gibt es eine Möglichkeit, im Test zu behaupten, dass das Ereignis tatsächlich ungebunden war, bevor es zerstört wurde? Gibt es eine Möglichkeit, alle Ereignisse auf der Seite abzufragen und dann nach dem entsprechenden Filter zu filtern?

+0

Es gibt keine Möglichkeit, programmgesteuert zu bestimmen, ob ein Ereignis an ein Element gebunden oder nicht gebunden wurde, ohne eine Schnittstelle dazwischen hinzuzufügen und sie dort zu verfolgen. Sie haben also Ihre eigene Frage beantwortet: Der Zugriff auf den Listener über jQuery ist der richtige Weg. Zwischenspeichern Sie das Element, bevor Sie die Komponente löschen, und verwenden Sie es für die Suche danach. – runspired

+0

Sie können die Methode 'willDestroyElement' nur manuell auslösen und prüfen, ob die Ausführung nicht abgeschlossen ist. Und Sie können prüfen, ob Hook-Aufrufe auf Element zerstören –

+0

@runspired Sie sind richtig. Wenn ich das Element zwischenspeichere, dann gibt der Aufruf von '$ ._ data (etwas, 'events')' undefined statt eines Objekts zurück, und damit kann ich etwas behaupten. Wenn Sie die Frage beantworten, kann ich Ihnen Kredit geben! –

Antwort

1

Es gibt keine Möglichkeit, programmgesteuert zu bestimmen, ob ein Ereignis an ein Element gebunden oder nicht gebunden wurde, ohne eine Schnittstelle dazwischen hinzuzufügen und es dort zu verfolgen.

Sie haben also tatsächlich Ihre eigene Frage beantwortet: Der Zugriff auf den Listener über jQuery ist der richtige Weg. Zwischenspeichern Sie das Element, bevor Sie die Komponente löschen, und verwenden Sie es für die Suche danach.