【问题标题】:Don't understand 3rd argument to Backbone events binding不理解 Backbone 事件绑定的第三个参数
【发布时间】:2012-07-29 01:11:39
【问题描述】:

我正在阅读有关如何使用 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 属性与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');
    }
});

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

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

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

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

    2) .bind 已重命名为 .on,您可以检查 Backbone documentation 中的第三个参数(即 context),在 Backbone 中您有来自 Underscore_.bindAll documented here它将this 分配给您指定的所有函数。

    3) eventsView 中是侦听 DOM 事件(单击、鼠标悬停、鼠标按下等)的东西,当然你会知道触发了哪个 DOM 元素,.bind 或者说@987654337 @ 在调用 .trigger 时执行某些操作,整个 Backbone 代码都充满了自定义触发器,因此如果您愿意,您可以收到有关 model.add、model.remove、collection.reset 等的通知。还要检查 @ 987654324@

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-09
        • 1970-01-01
        • 1970-01-01
        • 2014-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-03
        相关资源
        最近更新 更多