我还是骨干的新手:
这是我的问题,我发现很难解释:
在初始化时有一个类似这样的模型:
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);
第一个日志显示更新的模型,但后者显示初始默认值。
为什么这样工作?
答案 0 :(得分:0)
它们是两个不同的副本。您的QuestionModel有一个名为Selections的SelectionsCollection属性和一个Backbone属性,也称为Selections。我假设你想使用SelectionsCollection,该属性将不会与之保持同步。该属性是我认为无意中添加到模型中的原始json。
很难确切地说明如何修复它,因为您没有显示创建和获取这些模型和集合的代码。无论你在哪里选择JSON并且最初将reset
放入集合中,你都可以将它从JSON中删除它和/或问题模型中的unset
如果它已经存在......
这也会打印错误的原始数据:
console.log(window.pkg.Questions.get(this.Id).get('Selections')); // print original JSON
您可以在QuestionModel的parse
中删除它:
parse: function(data) {
// removing Selections from data here will prevent
// it from being added as an attribute.
delete data.Selections;
return data;
}
如果您执行此操作,并且希望将选择内容包含在QuestionModel的toJSON
输出中,则还需要覆盖toJSON
。
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;
}