ard*_*ell 5 ember.js ember-data
鉴于模型:
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')
});
Run Code Online (Sandbox Code Playgroud)
而实例:
var myPost = Blog.Post.createRecord({ id: 45, title: 'Foo Bar' })
Run Code Online (Sandbox Code Playgroud)
当我这样做时myPost.store.commit()(通过ember-data的DS.RESTAdapter),我的服务器返回一个应该应用的自动生成标签的列表myPost.示例响应json:
{
posts: [
{
id: 45,
title: 'Foo Bar',
tags: [
{ id: 1, foo: 'bar1' },
{ id: 2, foo: 'bar2' }
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我希望这myPost最终会得到json返回的两个标签,但我得到了这个错误:
Error: <DS.StateManager:ember448> could not respond to event invokeLifecycleCallbacks in state rootState.loaded.updated.uncommitted.
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
编辑:澄清json以包含每个@ MikeAski评论的ID.给出的示例是我的实际案例的简化版本 - 实际案例包括标签ID.
首先,您需要“镜像”模型之间的关系:
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')
});
Run Code Online (Sandbox Code Playgroud)
然后您需要将映射添加到您的适配器:
Blog.RESTSerializer = DS.RESTSerializer.extend({
init: function() {
this._super();
this.map('Blog.Post',{
tag:{embedded:'always'},
});
}
});
Run Code Online (Sandbox Code Playgroud)
并将 post_id 添加到 JSON 中的标签。
| 归档时间: |
|
| 查看次数: |
984 次 |
| 最近记录: |