我无法获得 embedded
hasMany
正确处理 ember 数据。
我有这样的东西
App.Post = DS.Model.extend({
comments: DS.hasMany('App.Comment')
});
App.Comment = DS.Model.extend({
post: DS.hasMany('App.Post'),
name: attr('string')
});
我的 API 返回以下
GET /post
:[
{
id: 1
comments: [{name: 'test'}, {name: 'test2'}]
},
...
]
我需要用
POST /post
发送这个:[
{
comments: [{name: 'test'}, {name: 'test2'}]
},
...
]
我想使用 Ember 模型并让他们提出适当的请求:
var post = App.store.createRecord(App.Post, hash_post_without_comments);
post.get('comments').createRecord(hash_comment);
App.store.commit(); // This should call the POST api
和
var posts = App.store.find(App.Post); // This should call the GET api
当我尝试类似
post: DS.hasMany('App.Post', {embedded: true})
,GET 正在工作,但 POST 正在尝试为这两条记录创建一个 POST,而不仅仅是父记录。编辑:我的真实用例
1-我刚刚从 master 构建了 ember 数据
2-我的适配器:RESTAdapter
3- 序列化器:JSONSerializer
4-我添加了
App.MyAdapter.map('App.Join', {
columns: { embedded: 'always' }
});
5- 我的模型是:
App.Join = DS.Model.extend({
rowCount: DS.attr('number'),
columns: DS.hasMany('App.JoinColumn'),
});
App.JoinColumn = DS.Model.extend({
join: DS.belongsTo('App.Join')
});
6- 何时:
var a = App.Join.find(1);
a.get('columns').createRecord({});
App.store.commit();
joincolumn 的 POST 已发送且父级不脏
我错过了什么?
最佳答案
在 master 上,正确的 API 是:
App.Adapter.map('App.Post', {
comments: { embedded: 'always' }
});
embedded
的两个可能值是:load
:加载时嵌入子记录,但应保存为独立记录。为了使它起作用,子记录必须有一个 ID。 always
:加载时嵌入子记录,并保存嵌入在同一记录中。这当然会影响记录的脏度(如果子记录发生更改,适配器会将父记录标记为脏)。 如果您没有自定义适配器,可以调用
map
直接上DS.RESTAdapter
:DS.RESTAdapter.map('App.Post', {
comments: { embedded: 'always' }
});
关于javascript - 如何使嵌入的 hasMany 关系与 ember 数据一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14320925/