backbone.js - 为什么我需要对 Backbone.js 自定义事件使用 Underscore.js _.bind 方法?

标签 backbone.js underscore.js

var DocumentEventsView = Backbone.View.extend({
  initialize : function () {
    $(document).on('visibilitychange', _.bind(this.onVisibilityChange, this));
  },  
  onVisibilityChange : function () {
    console.log('inside onVisibilityChange');
  }
});

那么为什么我不能只做 $(document).on('visibilitychange', 'onVisibilityChange' 呢?

我知道 bind 方法是保持和传递方法的上下文,但我不关心上下文,我从来没有在 onVisibilityChange 中使用它。为什么 $(document).on('visibilitychange', 'onVisibilityChange' 不起作用?

最佳答案

这样 this 中的 onVisibilityChange 对象将成为您的 View 对象。

如果你不需要这个,那么不要使用 _.bind 。唯一的问题是你以后必须非常小心,当你改变主意并在 this 中使用 onVisibilityChange 时:你很有可能忘记 this 不引用 View 对象,并在你的代码中引入一些有趣的错误代码。

Here 是一个工作示例,有和没有 _.bind :

var  MyView1 = Backbone.View.extend({
        initialize: function () {
            $(document).on('click', _.bind(this.onClick, this));
        },
        onClick: function () {
            console.log('inside onClick, "this" is ' + this.toString());
        },
        toString: function () {
            return "[object MyView1]";
        }
    }),
    myView1 = new MyView1(),
    MyView2 = Backbone.View.extend({
        initialize: function () {
            $(document).on('dblclick', this.onDblClick);
        },
        onDblClick: function () {
            console.log('inside onDblClick, "this" is ' + this.toString());
        },
        toString: function () {
            return "[object MyView2]";
        }
    }),
    myView2 = new MyView2();

console.clear();
$(document).click();
$(document).dblclick();

输出:
inside onClick, "this" is [object MyView1]
inside onDblClick, "this" is [object HTMLDocument]

为了简单起见,我使用了 clickdblclick 事件。输出写入控制台,按 F12。在最新的 Chrome 中测试。

关于backbone.js - 为什么我需要对 Backbone.js 自定义事件使用 Underscore.js _.bind 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19576332/

相关文章:

javascript - Backbone 形式:选择字段的样式选项?

javascript - 主干验证插件不验证

javascript - 将客户端 JavaScript 模板放在 HTML 或 JavaScript 中?

javascript - 函数内的 Underscore.js 函数

javascript - 为什么 UnderscoreJS 使用 toString.call() 而不是 typeof?

javascript/下划线 : find objects by property in an array, 并将它们组合起来

javascript - 用 sinon 监视一个方法。绑定(bind)到事件监听器的方法。方法已执行但 .calledOnce 为 false?

backbone.js - 似乎无法在 Coffeescript 中正确绑定(bind) Backbone 事件

javascript - Backbone : 404 Not Found

JavaScript/Underscore 获取对象中所有项目的最小最大值