2013-06-04 43 views
0

我有兩個主幹視圖類fileView和userDetails。去除未使用類的主幹事件(事件被觸發兩次)

在Web應用程序,我使用的文件查看渲染的所有文件

在另一頁我用的UserDetails一個頁面視圖來顯示用戶的詳細信息,並創建文件查看的新實例也列出用戶文件。

在我瀏覽這兩個頁面後,我的事件被觸發兩次(一次爲filesView,一次爲userDetails.fileView)。

如何刪除userDetails.fileView的事件?我閱讀文檔並嘗試了迄今爲止沒有運氣的任何事情。

回答

1

我覺得你有兩點要實現這一點:

  1. 對於骨幹事件不使用object.on(事件,回調,上下文) 儘可能即可。因爲它會將對象的參考 傳遞給回調函數,您很難有機會將其刪除。相反, 使用object.listenTo(other,event,callback),所以你可以用 object.stopListening()來刪除它們。
  2. 考慮到上述情況,你可以在你的 視圖中創建一個幫助函數,比如說「dispose」。在該函數中,首先將stopListening()事件附加到您的視圖,然後將其從DOM樹中移除()。

這裏的更詳細一些英特爾: http://addyosmani.github.io/backbone-fundamentals/#memory-management

+0

實際上移除一個調用其remove()函數的視圖也會停止監聽通過listenTo()監聽的任何事件,因此在這種情況下不需要使用dispose函數。 Backbone.js中的相關代碼http://backbonejs.org/docs/backbone.html#section-128 – namero999

+0

哦,是的,你是對的 –

1

處理與最新版本的骨幹事件的正確方式是listenTo()功能。它的行爲就像是一個常規的事件監聽器,但它讓你調用這個函數的對象知道他們正在監聽的內容。這樣,一旦對象不再使用(例如當刪除View時),您就可以自動清理。如果需要,您當然可以撥打stopListening()手動觸發此行爲。