1

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

例如,我看到 nettuts 的一篇文章(首先出现在 Google 结果中)讨论了关于使用的讨论,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属性与 a 一起使用Collection,而是需要在方法中使用 jQuery 的 bindinitialize方法...

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');
    }
});

……首先,这是为什么呢?

但更重要的是,第三个论点this是为了什么?我查看了bindjQuery 文档(因为在 Backbone 网站上没有提及bind),它没有第三个参数?

4

2 回答 2

2

1)Backbone.Controller没有被删除,它被重命名为Backbone.Router,你可以在手册旁边查看更改日志

2).bind已重命名为,您可以检查Backbone 文档.on中的第三个参数(即context),在您已从此处记录的文档中,它分配给您指定的所有功能。Backbone_.bindAllUnderscore this

3)events在 a 内部View是一些监听 DOM 事件(点击、鼠标悬停、鼠标按下等)的东西,当然你会知道触发了哪个 DOM 元素,.bind或者说.on当 an.trigger被调用时做了一些事情,整个 Backbone 代码充满了自定义触发器,以便您可以根据需要收到有关 model.add、model.remove、collection.reset 等的通知。另请查看Backbone 文档

于 2012-07-28T16:39:41.110 回答
2

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

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

于 2012-07-28T16:55:28.863 回答