繁体   English   中英

灰烬无法从hasMany关系中获取数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM