2017-02-03 3 views
0

Wir haben gerade einen Fehler-Tracker für unsere Ember-Anwendung installiert, und der einzige Fehler, der gemeldet wird, ist Cannot read property 'find' of undefined. Der Code, der diesen Fehler verursachen ist innerhalb einer Komponente, und sieht wie folgt aus:Ember kann die Eigenschaft 'find' von undefined nicht lesen

this.set('interval', setInterval(() => { 
    const current = this.get('counter') - 1; 
    this.set('counter', current); 
    this.$().find('.countdown-number').text(current); // <- error here 
}, 1000)); 

Ich verstehe nicht, wie dies geschehen kann. Wie kann $() nicht definiert werden, da es ein Teil des Ember-Frameworks ist?

Nach dem Fehler-Tracker passiert es für eine Reihe von verschiedenen Browsern, neuesten Chrome zum Beispiel. Ich kann den Fehler jedoch in keinem Browser reproduzieren.

Ich weiß, das ist nicht der "ember Weg" zum Aktualisieren eines Textes in einem div, aber ich würde lieber nicht viel neu erstellen, ich möchte nur den Fehler mit so wenig Änderungen wie möglich beheben.

Antwort

1

this.$() wird undefiniert, wenn die Komponente zerstört oder nicht ordnungsgemäß gerendert wird. Stellen Sie sicher, dass Sie this.$() nur aufrufen, wenn sich die Komponente in DOM befindet und unter willDestroyElement alle Ereignisse entfernen, die auf this.$() zugreifen können.

+1

Ahh, das macht wirklich viel Sinn! Der Code in der obigen Frage wurde aktualisiert, und wie Sie sehen können, ist es ein Intervall, das wahrscheinlich auch nach der Zerstörung der Komponente weiterläuft. Das Hinzufügen von 'clearInterval' zu' willDestroyElement' könnte eine Lösung sein, ich werde es ausprobieren. – TheQ

+0

Definitiv sollte dies Dinge reparieren. Sie haben einen Verweis gespeichert als "Intervall", so sollte es schnell behoben werden. :) –

+1

Es funktioniert perfekt, kein einziger Fehler seit 4 Stunden, während wir vorher jede Minute hatten. Vielen Dank! :) – TheQ

Verwandte Themen