我正在尝试使用以下代码创建一个包含另一个模型对象的模型对象
//create a question object to be embedded
question = new Onethingaday.Models.Question()
question.set({id:"123456"},{text:"xxxx"},{slug:"xxxx"})
//create the main muse object which contains the question object
muse = new Onethingaday.Models.Muse()
muse.set({question:question.toJSON()})
我希望收到的缪斯模型结构如下:
但是,我得到以下结构
与预期结果相比,我似乎得到另一层'问题:对象'。
如何设置对象以获得预期结果?或者我是否需要操纵结果以删除附加图层?
答案 0 :(得分:2)
首先,这不符合你的想法:
question.set({id:"123456"},{text:"xxxx"},{slug:"xxxx"})
将id
设置为"123456"
,将{text:"xxxx"}
视为set
的选项,并忽略{slug:"xxxx"}
。你想这样说:
question.set({
id: "123456",
text: "xxxx",
slug: "xxxx"
});
设置三个属性。
关于真正的问题。 default toJSON
就是这样:
return _.clone(this.attributes);
所以你必须使用改变toJSON
的东西来包含question
键而不是简单地返回属性对象。你可以试试Backbone股票:
var M1 = Backbone.Model.extend({});
var M2 = Backbone.Model.extend({});
var m1 = new M1;
m1.set({ a: 'b', c: 'd' });
var m2 = new M2;
m2.set({ m1: m1.toJSON() });
console.log(m2.attributes);
你会在控制台中看到这个:
m1: Object
a: "b"
c: "d"
没有额外的命名空间。演示:http://jsfiddle.net/ambiguous/9ptgq/
因此,您或您正在使用的某个库已更改toJSON
,您必须考虑到这一点:
var muse = new Onethingaday.Models.Muse()
muse.set(question.toJSON());
您可以查看console.log(question.toJSON())
必须说明的内容,以验证toJSON
是否有问题。