我需要在骨干视图内的窗口对象上绑定事件,当导航到其他骨干视图时,我想取消绑定窗口事件。在骨干网中有没有有效的方法呢?
示例:
class Example.Views.EntriesList extends Backbone.View
initialize: ->
$(window).unbind('scroll').on 'scroll', _.bind(@scroll, this)
以上代码适用于此视图,但在导航到不同的骨干视图时,滚动绑定仍然存在。我希望在视图更改时删除绑定到窗口的所有事件。
答案 0 :(得分:4)
你真的应该在忘记之前调用View#remove
来清理视图。因此,您应该在视图中看到remove
这样的内容:
remove: ->
$(window).off('scroll')
super()
请注意,当您'scroll'
时window
$(window).off('scroll')
上的initialize: ->
# The caller should have cleaned everything up so no need to `off` here.
$(window).on('scroll.EntriesList', _.bind(@scroll, @))
remove: ->
$(window).off('scroll.EntriesList')
# or .off('.EntriesList')
事件将全部解除绑定,您可能会干扰其他代码可能比你想做的更多。你最好使用命名空间:
{{1}}
让您的观点不会干扰您的应用程序的其他部分。
答案 1 :(得分:2)
看看这个答案:Disposing of view and model objects in Backbone.js
如果这是您申请中的常见要求,我建议您尝试Backbone.Marionette,这可以帮助您以此方式和其他方式
Backbone.Marionette.ItemView.extend({
onClose: function(){
// custom closing and cleanup goes here
}
});