绑定功能到Backbone Collection重置

时间:2014-02-07 18:53:47

标签: javascript backbone.js

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

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。删除绑定到'reset'事件会使数据获取和代码工作,但我希望每次重置集合时都要进行更多处理。关于如何在Backbone Collection中定义函数我缺少什么?

1 个答案:

答案 0 :(得分:1)

this.on("reset", this.addAll);

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