不理解Backbone事件绑定的第三个参数

时间:2012-07-28 12:52:37

标签: backbone.js

我正在阅读如何使用Backbone.js,但与最新版本的Backbone库相比,似乎所有在线提供的文章都已过时了?这没有用!

我已经看过nettuts的一篇文章(首先在谷歌搜索结果中)进入关于使用Backbone.Controller的讨论,但是已经从Backbone中删除了,因此很难发现。

但无论如何,我的问题是关于Backbone中的事件对象。

使用“查看”,您可以执行...

var ContactsView = Backbone.View.extend({
    initialize: function(){
        console.log('View initialized');
    },

    events: {
        'change select': 'displaySelected'
    },

    displaySelected: function (event) {
        console.log('get model data and display selected user', event);
    }
});

...但是你不能将events属性与Collection一起使用,而是需要在initialize方法中使用jQuery的bind方法......

var Contacts = Backbone.Collection.extend({
    model: Contact,

    initialize: function(){
        this.bind('add', this.model_added, this);
    },

    model_added: function(){
        console.log('A new model has been created');
    }
});

......首先,这是为什么?

但更重要的是第3个参数this是什么?我在jQuery文档中查找了bind(因为在Backbone站点上没有提到bind)并且它没有第三个参数?

2 个答案:

答案 0 :(得分:2)

1)Backbone.Controller未被移除,已重命名为Backbone.Router,在手册旁边您可以查看Change Log

2).bind已重命名为.on,您可以检查context中{3}}中的第3个参数(Backbone)来自_.bindAll Backbone documentationUnderscore thisevents分配给您指定的所有功能。

3)View内的.bind是侦听DOM事件(click,mouseover,mousedown等)的东西,当然你会知道触发了哪个DOM元素,{{1}或者说.on在调用.trigger时执行某些操作,整个Backbone代码都充满了自定义触发器,因此,如果您愿意,可以通知model.add,model.remove ,collection.reset等。同时检查documented here

答案 1 :(得分:2)

第三个参数是可选的 - 它提供了一种将上下文传递给处理函数的方法。

在JavaScript中,this是上下文的 - 它可以并且将根据您所在的对象而改变。通过将this传递给可选的context参数,您将传递绑定事件的对象的范围。这样做可以让您在处理程序中使用相同的上下文。