如何在骨干视图中绑定/取消绑定窗口事件

时间:2013-11-26 16:37:00

标签: backbone.js coffeescript backbone-views

我需要在骨干视图内的窗口对象上绑定事件,当导航到其他骨干视图时,我想取消绑定窗口事件。在骨干网中有没有有效的方法呢?

示例:

class Example.Views.EntriesList extends Backbone.View

  initialize: ->

    $(window).unbind('scroll').on 'scroll', _.bind(@scroll, this)

以上代码适用于此视图,但在导航到不同的骨干视图时,滚动绑定仍然存在。我希望在视图更改时删除绑定到窗口的所有事件。

2 个答案:

答案 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
  }
});

Reference