真正基本的问题,但我似乎无法弄清楚为什么我无法将方法绑定到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中定义函数我缺少什么?
答案 0 :(得分:1)
this.on("reset", this.addAll);
你要小心范围。 initialize函数将绑定到“this”,这将是在某个时刻实例化的新对象。但是在初始化函数的范围内,addAll是未定义的,因为您在“this”尚不存在的范围内编写它。最终,addAll属性将绑定到“this”,但这里addAll是您传递给extend的新对象的属性,指向匿名函数。