Ember无法从hasMany关系中获取数据

时间:2015-12-01 17:07:12

标签: ember.js ember-data

我尝试使用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(使用active_model_serializers生成json)

    {"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>

在页面上,我获得了有关工作和评论(0)的所有信息,但Chrome的Ember Inspector显示了评论。

我如何打印评论?

2 个答案:

答案 0 :(得分:0)

您的模型定义应为:

comments: DS.hasMany('comment', {async: false}),

因为相关数据正在加载响应,而不是异步获取。 如果这是Ember 2.0应用程序,则默认的异步设置为true。来自Ember博客(http://emberjs.com/blog/2015/06/18/ember-data-1-13-released.html,强调我的):

  

在Ember Data 2.0中,默认情况下,关系将是异步的。同步   仍然会支持关系,但您需要手动完成   通过在您的人际关系中设置 {async:false} 来选择加入他们。烬   如果您有任何数据,数据1.13将记录您的弃用警告   未明确设置async属性的关系。   此外,您可以使用ember-watson来帮助识别您的案例   您没有明确异步的关系的代码库   属性。

答案 1 :(得分:0)

问题解决了。默认情况下,DS.hasMany关联的ID不会添加到序列化的对象(http://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html)。

应该添加

CStr("google / cpc,bing / cpc").Split(",")