【发布时间】:2012-10-24 22:02:21
【问题描述】:
在 Backbone.js 视图之一中,我正在使用 this.model.set( { read: true } ); 更新当前模型(消息实例)的“读取”属性。我验证了这个命令只执行一次(我知道“鬼事件”)。正如您在下面看到的,我将集合配置为触发更新事件,其中整个集合被保存到变量中。
不幸的是,saveToVar 函数被调用了 3 次而不是 1 次!此外,第一次调用saveToVar,this 正确包含所有集合的模型,而第二次和第三次this 只有一个模型,即我进行更新的模型。
我逐条追踪所有内容,但我不知道为什么会发生这种情况。
window.Message = Backbone.Model.extend({
});
window.MessageCollection = Backbone.Collection.extend({
model: Message,
initialize: function()
{
this.on("change", this.saveToVar);
},
saveToVar: function(e)
{
App.Data.Messages = this.toJSON();
return;
}
});
【问题讨论】:
-
我将代码粘贴到 jsfiddle.net 中,但由于某种原因我无法运行它?实际上,以前从未使用过它。 link
-
我也挖得更深了,似乎
saveToVar: function(model) { App.Data.Messages = model.collection.toJSON();}是一种解决方法。也许集合中的this指的是模型? -
但在这里,事件又被触发了 3 次!
-
您需要在 jsfiddle.net 上包含
backbone.js、underscore.js和jquery.js,而不仅仅是underscore.js。看看我的回答中小提琴上的 Manage Resources 面板,你会看到如何包含你需要的任何外部 JS 和 CSS 资源。
标签: backbone.js backbone-events