2017-02-03 22 views
0

我們剛剛爲我們的Ember應用程序安裝了錯誤跟蹤器,並且唯一報告的錯誤是Cannot read property 'find' of undefined。導致此錯誤的代碼位於組件內,如下所示:Ember無法讀取未定義的屬性'find'

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

我不明白如何發生這種情況。 $()怎麼可能是未定義的,因爲它是ember框架的一部分?

根據錯誤跟蹤器,它發生了一堆不同的瀏覽器,例如最新的Chrome瀏覽器。然而,我不能在任何瀏覽器中重現錯誤。

我知道這不是更新div中文本的「餘燼方式」,但我寧願不必重建很多,我只是想盡可能地修改錯誤。

回答

1

this.$()將不確定如果組件被銷燬或不正確渲染。確保僅在組件位於DOM中時調用this.$(),並且在willDestroyElement中刪除可訪問this.$()的所有事件。

+1

啊,這實際上很有道理!在上面的問題中更新了代碼,正如你可以看到它是一個間隔,即使在組件被銷燬之後也可能持續。將'clearInterval'添加到'willDestroyElement'可能是一個解決方案,我會試試看。 – TheQ

+0

肯定這應該解決的問題。你有參考存儲''間隔'所以它應該是快速修復。 :) –

+1

它完美的工作,現在4個小時沒有一個錯誤,而我們以前有幾分鐘。謝謝! :) – TheQ

相關問題