鉴于模型:
Blog.Post = DS.Model.extend({
title: DS.attr('string'),
tags: DS.hasMany('Blog.Tag', { embedded: true })
});
Blog.Tag = DS.Model.extend({
foo: DS.attr('string'),
bar: DS.attr('string')
});
实例:
var myPost = Blog.Post.createRecord({ id: 45, title: 'Foo Bar' })
当我myPost.store.commit()
(通过ember-data的DS.RESTAdapter)时,我的服务器返回一个自动生成的标签列表,应该应用于myPost
。响应示例json:
{
posts: [
{
id: 45,
title: 'Foo Bar',
tags: [
{ id: 1, foo: 'bar1' },
{ id: 2, foo: 'bar2' }
]
}
]
}
我希望myPost
最终得到json返回的两个标签,但我得到了这个错误:
Error: <DS.StateManager:ember448> could not respond to event invokeLifecycleCallbacks in state rootState.loaded.updated.uncommitted.
我在这里做错了什么?
编辑:澄清json以包含每个@ MikeAski评论的ID。给出的示例是我的实际案例的简化版本 - 实际案例包括标签ID。
答案 0 :(得分:0)
首先,您需要“镜像”模型之间的关系:
Blog.Post = DS.Model.extend({
title: DS.attr('string'),
tags: DS.hasMany('Blog.Tag', { embedded: always })
});
Blog.Tag = DS.Model.extend({
foo: DS.attr('string'),
bar: DS.attr('string'),
post: DS.belongsTo('Blog.Post')
});
然后,您需要向适配器添加映射:
Blog.RESTSerializer = DS.RESTSerializer.extend({
init: function() {
this._super();
this.map('Blog.Post',{
tag:{embedded:'always'},
});
}
});
在你的JSON中将post_id添加到Tag。