Backbone.js 主干模型奇怪地缓存了自己
我还是个新手: 以下是我发现很难解释的问题: 在初始化时,有一个类似这样的模型:Backbone.js 主干模型奇怪地缓存了自己,backbone.js,Backbone.js,我还是个新手: 以下是我发现很难解释的问题: 在初始化时,有一个类似这样的模型: Model: { Id:xxx, Questions: [ { Id: "yy", Selections: [ {OptionId:"aaa"},
Model:
{
Id:xxx,
Questions:
[
{
Id: "yy",
Selections:
[
{OptionId:"aaa"},
...,
{OptionId:"zzz"}
]
},
....
]
}
有一个事件方法更新选择集合。
事件触发后,我通过以下两个代码得到了两个不同的结果:
window.pkg.Questions.get(this.Id).Selections.reset(selectedoptions);
console.log(window.pkg.Questions.get(this.Id).Selections.toJSON());
console.log(window.pkg.Questions.get(this.Id).toJSON().Selections);
第一个日志显示更新的模型,而后面的日志显示初始默认值
为什么会这样
它们是两个不同的副本。QuestionModel有一个名为Selections的SelectionCollection属性和一个主干属性,也称为Selections。我假设您想要使用SelectionCollection,而该属性将不会与它保持同步。该属性是我假设无意中添加到模型中的原始json 很难说确切的修复方法,因为您没有显示创建和获取这些模型和集合的代码。无论您在何处选择JSON并最初将其重置到集合中,您都可以将其从JSON中移除和/或在QuestionModel上取消设置(如果已经存在) 这也会打印错误的原始数据:
console.log(window.pkg.Questions.get(this.Id).get('Selections')); // print original JSON
您可以在QuestionModel的解析中删除它:
如果您这样做,并且希望在QuestionModel的toJSON输出中包含这些选择,那么还需要覆盖toJSON
parse: function(data) {
// removing Selections from data here will prevent
// it from being added as an attribute.
delete data.Selections;
return data;
}
toJSON: function() {
// get json for Question
var json = Backbone.Model.prototype.toJSON.call(this);
// add updated json for selections
json.Selections = this.Selections.toJSON();
return json;
}