Javascript backbone.js嵌套模型';s对象不是实例的唯一对象

Javascript backbone.js嵌套模型';s对象不是实例的唯一对象,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我有一个父模型,它在默认情况下具有嵌套模型。嵌套模型本身具有propertyA,这是一个具有defaultValue和userValue的对象。其思想是,父模型的每个实例都带有一个嵌套模型,该模型的userValue为null,并具有一个静态默认值 问题是,当我为一个实例更新userValue时,它最终会为以后的所有实例更改。我没有更新特定实例的userValue,而是做了一些错误的事情,更新了嵌套模型“prototype” 以下代码可从以下网址获得。谢谢你的帮助 var ParentModel

我有一个父模型,它在默认情况下具有嵌套模型。嵌套模型本身具有propertyA,这是一个具有defaultValue和userValue的对象。其思想是,父模型的每个实例都带有一个嵌套模型,该模型的userValue为null,并具有一个静态默认值

问题是,当我为一个实例更新userValue时,它最终会为以后的所有实例更改。我没有更新特定实例的userValue,而是做了一些错误的事情,更新了嵌套模型“prototype”

以下代码可从以下网址获得。谢谢你的帮助

var ParentModel=Backbone.Model.extend({
初始化:函数(){
var defaultObjs={
nestedModel:新的nestedModel()
};
$().extend(this.attributes,defaultObjs);
}
});
var NestedModel=Backbone.Model.extend({
默认值:{
“财产a”:{
“默认值”:“ABC”,
“userValue”:空
}
}
});
var ParentView=Backbone.View.extend({
初始化:函数(){
var self=这个;
var defaultValue=self.model.get(“nestedModel”).get(“propertyA”)[“defaultValue”];
var userValue=self.model.get(“nestedModel”).get(“propertyA”)[“userValue”];
var div=$(“默认值=”+
defaultValue+,userValue=“+
用户值+“”);
var divButton=$('')
。单击(函数(){
temp=self.model.get(“nestedModel”).get(“propertyA”);
temp.userValue=“DEF”;
//我的目的就是为一个特定的实例设置userValue,
//生成ParentView的另一个实例(通过单击按钮)显示
//即使对于新实例,也会设置userValue。
//我如何更改它,以便只更改特定
//实例?
//设定值
self.model.get(“nestedModel”).set({“propertyA”:temp});
//更新视图中的userValue
userValue=self.model.get(“nestedModel”).get(“propertyA”)[“userValue”];
$(this).parent().find(“span#userValue”).text(userValue);
});    
//将divButtont附加到div
div.append(div按钮)
//将div追加到正文
$('body')。追加(div)
},
});
$(“#添加”)。单击(函数(){
var newBoxView=newparentview({
模型:新的父模型()
});
});

感谢您的JSFIDLE。它完美地说明了你的问题

您可以看到,当您在默认设置中设置“propertyA”时,您创建的对象是与您创建的每个其他嵌套类一起复制的默认值。因此,在定义默认值时,您可以选择将其定义为函数,以便每次都创建新的默认值。如果您这样做,您就可以解决您的问题:

var ParentModel = Backbone.Model.extend({
    defaults: function() {
        return {nestedModel: new NestedModel()};
    }
});


var NestedModel = Backbone.Model.extend({
    defaults: function() {
        return {
        "propertyA" : {
                        "defaultValue" : "ABC",
                        "userValue": null
                      }
        };
    }
});

谢谢你的邀请。它完美地说明了你的问题

您可以看到,当您在默认设置中设置“propertyA”时,您创建的对象是与您创建的每个其他嵌套类一起复制的默认值。因此,在定义默认值时,您可以选择将其定义为函数,以便每次都创建新的默认值。如果您这样做,您就可以解决您的问题:

var ParentModel = Backbone.Model.extend({
    defaults: function() {
        return {nestedModel: new NestedModel()};
    }
});


var NestedModel = Backbone.Model.extend({
    defaults: function() {
        return {
        "propertyA" : {
                        "defaultValue" : "ABC",
                        "userValue": null
                      }
        };
    }
});