采用以下模型:
MyModel= Backbone.Model.extend({
defaults : {
myNestedModel:undefined,
},
initialize: function() {
this.set({myNestedModel: new MyNestedModel());
}
});
它有一个名为“myNestedModel”的属性,其定义如下:
MyNestedModel= Backbone.Model.extend({
defaults : {
myModel:undefined,
}
});
它也有一个单一的属性名称“myModel”。现在,如果我创建 MyModel 的一个实例:
aModel = new MyModel();
嵌套模型将在 MyModel 的初始化方法中设置。然后我在两步过程中使用 JSON.stringify:
// Use Backbone.js framework to get an object that we can use JSON.stringfy on
var modelAsJson = aModel.toJSON();
// Now actually do stringify
var modelAsJsonString = JSON.stringify(modelAsJson);
这工作正常,我得到了 MyModel 的 JSON 表示,它是 MyNestedModel 的属性。当我使用默认值时会出现问题,例如:
MyModel= Backbone.Model.extend({
defaults : {
new MyNestedModel(),
}
});
这会导致 JSON.stringify 出现问题,因为它不支持循环引用。我假设正在创建循环引用,因为 MyModel 的所有实例共享同一个 MyNestedModel 实例。而 initialize 方法为每个实例创建一个新的嵌套模型。
问题:
- 我对
defaults:{}
成为问题“原因”的理解是否正确? - 从我最近发布的一个问题中,我得到的印象是我应该对所有属性使用默认值。如果是这种情况,我应该如何在这篇文章/问题中提出的场景中使用默认值?
- 有人可以澄清
defaults:{}
关于值何时适用、何时被覆盖以及实例是否共享相同的默认“实例”的用法吗?