gpt4 book ai didi

json - Ember 数据 : Saving relationships

转载 作者:行者123 更新时间:2023-12-02 09:44:58 24 4
gpt4 key购买 nike

我需要一次性将一个深层对象保存到服务器,但无法在网上找到任何使用最新 ember 数据(1.0.0-beta.4)的示例。

例如,对于这些模型:(jsfiddle)

App.Child = DS.Model.extend({
name: DS.attr('string'),
age: DS.attr('number'),
toys: DS.hasMany('toy', {async:true, embedded:'always'}),
});
App.Toy = DS.Model.extend({
name: DS.attr('string'),
child: DS.belongsTo('child')
});

这段代码:

actions: {
save: function(){
var store = this.get('store'),
child, toy;

child = store.createRecord('child', {
name: 'Herbert'
});
toy = store.createRecord('toy', {
name: 'Kazoo'
});

child.set('toys', [toy]);
child.save();
}
}

它只保存子对象的 JSON,而不保存任何玩具——甚至没有侧面加载:

{
child: {
age: null
name: "Herbert"
}
}

我也必须手动保存玩具吗?无论如何,我可以让它将以下 JSON 发送到服务器:

{
child: {
age: null
name: "Herbert",
toys: [{
name: "Kazoo"
}]
}
}

或者

{
child: {
age: null
name: "Herbert",
toys: [1]
}
}

参见 JSFiddle:http://jsfiddle.net/jgillick/LNXyp/2/

最佳答案

这里的答案已经过时了。 Ember Data 现在支持嵌入记录,这使您能够准确地执行您想要执行的操作,即在一个大负载中获取和发送完整的对象图。例如,如果您的模型设置如下:

App.Child = DS.Model.extend({
name: DS.attr('string'),
age: DS.attr('number'),
toys: DS.hasMany('toy')
});
App.Toy = DS.Model.extend({
name: DS.attr('string'),
child: DS.belongsTo('child')
});

您可以为您的子模型定义自定义序列化器:

App.ChildSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
toys: {embedded: 'always'}
}
});

这告诉 Ember Data 您希望将“玩具”作为“ child ”有效负载的一部分包含在内。来自 API 的 HTTP GET 响应应如下所示:

{
"child": {
"id": 1,
"name": "Todd Smith",
"age": 5,
"toys": [
{"id": 1, "name": "boat"},
{"id": 2, "name": "truck"}
]
}
}

当您保存模型时,Ember Data 会将其发送到服务器:

{  
"child":{
"name":"Todd Smith",
"age":5,
"toys":[
{
"id":"1",
"name":"boat",
"child":"1"
},
{
"id":"2",
"name":"truck",
"child":"1"
}
]
}
}

这里有一个 JSBin 演示了这一点。

http://emberjs.jsbin.com/cufaxe/3/edit?html,js,output

在 JSbin 中,当您单击“保存”按钮时,您需要使用 Dev Inspector 来查看发送到服务器的请求。

关于json - Ember 数据 : Saving relationships,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20714858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com