【问题标题】:How to bind/unbind window events in backbone view如何在主干视图中绑定/取消绑定窗口事件
【发布时间】:2013-11-26 16:37:00
【问题描述】:

我需要在主干视图内的窗口对象上绑定事件,当导航到其他主干视图时,我想取消绑定窗口事件。有没有什么有效的方法可以在主干中做到这一点?

示例:

class Example.Views.EntriesList extends Backbone.View

  initialize: ->

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

上面的代码非常适合这个视图,但是当导航到不同的主干视图时,滚动绑定仍然存在。我想在视图更改时删除所有绑定到窗口的事件。

【问题讨论】:

    标签: backbone.js coffeescript backbone-views


    【解决方案1】:

    您真的应该调用View#remove 来清理视图,然后再忘记它。所以你的视图中应该有这样的remove

    remove: ->
        $(window).off('scroll')
        super()
    

    请记住,当您 $(window).off('scroll') 时,您可能会通过将 所有 侦听器解除绑定到 window 上的 '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')
    

    防止您的视图干扰应用程序的其他部分。

    【讨论】:

      【解决方案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

      【讨论】:

        猜你喜欢
        • 2012-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多