[英]Ember can't get data from hasMany relationship
我尝试使用Ember数据构建Rails + Ember应用程序。
模型:
export default DS.Model.extend({
name: DS.attr('string'),
content: DS.attr('string'),
image_before: DS.attr('string'),
created_at: DS.attr('date'),
updated_at: DS.attr('date'),
status: DS.attr('number'),
comments: DS.hasMany('comment', {async: true}),
user: DS.belongsTo('user'),
});
并像这样获取json(json是使用active_model_serializers生成的)
{"work":{
"id":3,
"user_id":1,
"content":"My first photo",
"image_before": "image_before/original/AnViWyuup5I.png",
"created_at":"2015-08-11T16:57:24.153Z",
"updated_at":"2015-11-13T11:39:44.076Z",
"status":1,
"comment_ids":[13]
},
"comments": [{
"id": 13,
"text": "good!",
"created_at": "2015-09-28T10:34:16.461Z",
"user_id": 2
}]
}
模板是:
<div class="work__img-wrapper">
<img class="work__img" src="{{model.image_before}}">
</div>
<div class="work__content">{{model.content}}</div>
<div class="work__comments-list">
<strong>Comments( {{model.comments.length}} ):</strong>
{{#each model.comments as |comment|}}
<div class="work__comment">
<div class="work__comment-text">{{comment.text}}</div>
</div>
{{/each}}
</div>
在页面上,我获得了有关工作和Comments(0)的所有信息,但是Chrome的Ember Inspector显示了评论。
我也可以打印评论吗?
您的模型定义应为:
comments: DS.hasMany('comment', {async: false}),
因为相关数据是与响应一起加载的,而不是异步获取的。 如果这是Ember 2.0应用程序,则默认异步设置为true
。 从Ember Blog( http://emberjs.com/blog/2015/06/18/ember-data-1-13-released.html ,重点是我的):
在Ember Data 2.0中,关系默认是异步的。 仍将支持同步关系,但是您需要通过在关系上设置{async:false}来手动选择同步关系。 如果您有任何未明确设置async属性的关系,Ember Data 1.13将记录弃用警告。 另外,您可以使用ember-watson来帮助确定代码库中存在没有显式async属性关系的情况。
问题解决了。 默认情况下,DS.hasMany关联的ID不会添加到序列化的对象( http://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html )。
应该添加
export default DS.ActiveModelSerializer
.extend(DS.EmbeddedRecordsMixin)
.extend({
attrs: {
comments: {serialize: 'ids', deserialize: 'ids'}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.