【问题标题】:Binding function to Backbone Collection reset绑定功能到 Backbone Collection 重置
【发布时间】:2014-02-08 03:15:50
【问题描述】:

非常基本的问题,但我似乎无法弄清楚为什么我无法将方法绑定到集合上的重置事件。

HealthcheckList = Backbone.Collection.extend({

    model: Healthcheck,
    url: "/corsettiServices/rest/healthcheck/sort",

    initialize: function() {
        _.bindAll(this, "fetchSuccess", "addAll");
        console.log("Initializing view");
        this.on('reset', addAll);
        this.fetch({data: {type:'all'}, processData:true, success: this.fetchSuccess, reset: true});
    },

    addAll: function(m, options) {
        alert("adding");
    },

    fetchSuccess: function(m, response) {
        alert("success");
        console.log(m);
        m.each(function(h) {
            if (h.get("start")!=null) {
                $('#statusTable > tbody:last').append('<tr><td>' + h.get("start") + '</td><td>' + h.get("type") + '</td><td>' + h.get("status") + '</td></tr>');
            }
        })
    }
})

这会引发错误:未捕获的 ReferenceError: addAll is not defined。删除与“重置”事件的绑定使得数据获取和代码工作,但我想在每次重置集合时进行更多处理。关于如何在主干集合中定义函数,我缺少什么?

【问题讨论】:

    标签: javascript backbone.js


    【解决方案1】:
    this.on("reset", this.addAll);
    

    你要小心范围。初始化函数将绑定到“this”,这将是一个在某个时刻被实例化的新对象。但是在初始化函数 addAll 的范围内是未定义的,因为您在“this”尚不存在的范围内编写 this。最终 addAll 属性将绑定到“this”,但这里 addAll 是您传递给 extend 的新对象的属性,它指向一个匿名函数。

    【讨论】:

    • 甚至不需要传递上下文,因为他做了_.bindAll,只需要使用this.addAll而不是addAll
    • 对,并且使用上下文 ||这个。所以,它会默认为这个。我更新了我的答案并提供了解释。
    • 谢谢,我以为我试过了,但显然没有。欣赏功能范围的细节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    相关资源
    最近更新 更多