首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将模型对象嵌入到另一个模型对象中

如何将模型对象嵌入到另一个模型对象中
EN

Stack Overflow用户
提问于 2012-12-31 13:56:09
回答 1查看 161关注 0票数 1

我正在尝试使用以下代码创建一个包含另一个模型对象的模型对象

代码语言:javascript
运行
复制
//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模型结构如下:

但是,我得到的是以下结构

与预期的结果相比,我似乎得到了另一层“问题:对象”。

如何设置对象才能得到预期的结果?或者我需要操作结果来移除额外的层?

EN

回答 1

Stack Overflow用户

发布于 2012-12-31 15:49:56

首先,这并不是你想的那样:

代码语言:javascript
运行
复制
question.set({id:"123456"},{text:"xxxx"},{slug:"xxxx"})

这会将id设置为"123456",将{text:"xxxx"}视为set的选项,并忽略{slug:"xxxx"}。你想说的是:

代码语言:javascript
运行
复制
question.set({
    id:   "123456",
    text: "xxxx",
    slug: "xxxx"
});

来设置这三个属性。

谈到真正的问题。default toJSON就是这样的:

代码语言:javascript
运行
复制
return _.clone(this.attributes);

因此,您必须使用某种东西来更改toJSON以包含question键,而不是简单地返回attributes对象。您可以尝试使用股票主干:

代码语言:javascript
运行
复制
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);

您将在控制台中看到以下内容:

代码语言:javascript
运行
复制
m1: Object
    a: "b"
    c: "d"

看不到额外的命名空间。演示:http://jsfiddle.net/ambiguous/9ptgq/

因此,您或您正在使用的某个库已经更改了toJSON,您必须考虑到这一点:​

代码语言:javascript
运行
复制
var muse = new Onethingaday.Models.Muse()
muse.set(question.toJSON());

您可以查看一下console.log(question.toJSON())会说些什么来验证toJSON是否有问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14098013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档