我正在尝试使用以下代码创建一个包含另一个模型对象的模型对象
//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()})
我期望收到的muse模型结构如下:
但是,我得到的是以下结构
与预期的结果相比,我似乎得到了另一层“问题:对象”。
如何设置对象才能得到预期的结果?或者我需要操作结果来移除额外的层?
发布于 2012-12-31 15:49:56
首先,这并不是你想的那样:
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
键,而不是简单地返回attributes对象。您可以尝试使用股票主干:
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
是否有问题。
https://stackoverflow.com/questions/14098013
复制相似问题