在視圖remove()
方法中調用undelegateEvents()
是否是一種不好的做法?爲什麼它不被骨幹人士默認包括在內?一旦不再需要視圖就可以撤銷活動的最佳方式
我意識到我陷入了這麼多的綁定問題,當重新初始化視圖變量。儘管在創建新視圖時自動調用undelegateEvents()
,但它試圖取消關閉新實例化視圖的事件,而不是前一個。因此,除非每次手動調用它,否則ghost事件回調仍然存在,並且搞砸了我的應用程序。
處理這個問題的最佳方法是什麼?
在視圖remove()
方法中調用undelegateEvents()
是否是一種不好的做法?爲什麼它不被骨幹人士默認包括在內?一旦不再需要視圖就可以撤銷活動的最佳方式
我意識到我陷入了這麼多的綁定問題,當重新初始化視圖變量。儘管在創建新視圖時自動調用undelegateEvents()
,但它試圖取消關閉新實例化視圖的事件,而不是前一個。因此,除非每次手動調用它,否則ghost事件回調仍然存在,並且搞砸了我的應用程序。
處理這個問題的最佳方法是什麼?
在視圖
remove()
方法中調用undelegateEvents()
是不好的做法嗎?
它,除非你實現你自己的remove()
是沒有必要的,你不叫Backbone.View.remove()
或this.$el.remove()
。這就是如果你使用jQuery,至少。在Backbone視圖上調用remove()
將調用jQuery.remove()
,它將無論如何將刪除所有DOM事件偵聽器。
我意識到我陷入瞭如此多的綁定問題,只是重新初始化視圖變量。
很多人似乎使用Backbone.Events喜歡它的某種魔力,他們並不需要經過清理,如:
var View = Backbone.View.extend({
initialize : function (options) {
// `on()` or `bind()`
this.model.on('something', this.render, this);
}
});
查看Delegating events to a parent view in Backbone
我的回答您遇到的重影事件可能與Backbone事件而不是DOM事件有關嗎?
如果您保留模型對象但希望擺脫該視圖對象或其Backbone事件註冊,則必須執行view.model.off(null, null, this);
。您必須解除您在任何外部對象上註冊的事件。如果你願意,你可以覆蓋Backbone.View.remove()
並在那裏做,但默認情況下,該方法只是view.$el.remove()
的簡寫。
相關? http://stackoverflow.com/questions/10429648/backbone-js-how-to-unbind-from-events-on-model-remove/10433015#10433015 – fguillen
你是否在切換視圖時重新使用'el'而非創造新的? jQuery'delegate'綁定到視圖的'el'。 –
@ muistooshort是的,我經常重複使用相同的DOM容器,並將其賦予視圖,而不是每隔一段時間創建一個新容器。這就是爲什麼刪除鬼回調至關重要 – preslavrachev