Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 主干模型奇怪地缓存了自己_Backbone.js - Fatal编程技术网

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;
}