Ember只设置一个元素而不是多个元素

时间:2014-10-01 11:49:38

标签: javascript ember.js ember-data

我有两个异步模型:

App.Posts = DS.Model.extend({
    'content': attr('string'),
    'comments': DS.hasMany('comments', {async: true}),
});

App.Comments = DS.Model.extend({
    'body': DS.attr('string'),
    'postId': DS.belongsTo('posts', {async: true})
});

通过PostController我尝试通过动作加载评论onClick:

App.PostController = Ember.ArrayController.extend({
    loadComments: function(post_id) {
        this.store.find('comments', post_id);
    }
});

(或许还有更好的方法吗?)

请求和API响应是正确的(请参阅下面的API响应),但只呈现一条注释,然后Ember会抛出错误:

TypeError: Cannot read property 'postId' of undefined

在余烬控制台>数据选项卡注释模型中有一条注释,但注释模型中还有一个post元素,注释属性设置为undefined。这可以解释为什么Ember无法阅读postId属性,因为它不是评论。为什么Ember将帖子推送到评论模型中,只将一个而不是3个评论推送到模型中?

API响应

{
    "comments": [
        {
            "id": 2,
            "postId": 31152,
            "body": "Lorem ipsum dolor sit amet, consetetur",
        },
        {
            "id": 2,
            "postId": 31152,
            "body": "asdasd",
        },
        {
            "id": 2,
            "postId": 31152,
            "body": "asd asd sd",
        }
    ]
}

1 个答案:

答案 0 :(得分:0)

这是一个在黑暗中的轻微镜头,我通常把它作为评论,但它有点大。您可以尝试将所有模型引用更改为单数。这是Ember Data模型的正确模式。

App.Post = DS.Model.extend({
    'content': attr('string'),
    'comments': DS.hasMany('comment', {async: true}),
});

App.Comment = DS.Model.extend({
    'body': DS.attr('string'),
    'postId': DS.belongsTo('post', {async: true})
});

this.store.find('comment', post_id);

现在我写这篇文章,我可能会看到另一个问题。如果您通过post_id查询评论(假装它是7),那么Ember Data预计会返回一条记录,而不是一组记录。因此,它可能会查看评论集,并认为它是一个单一的记录,这只是夸大了它的逻辑。