2014-10-01 77 views
1

我有两个异步模式:灰烬集只有一个元素,而不是许多

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 

在余烬控制台>数据选项卡中,注释模型中有一个注释,但注释模型中也有一个注释元素,注释属性设置为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", 
     } 
    ] 
} 
+0

你可以显示你的路由器。如果您的评论嵌套在帖子资源中,您必须在您的控制器中指定。 – Stakoov 2014-10-03 12:26:59

回答

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期待返回单个记录,而不是一组记录。所以很可能看看评论集合,并认为它是一个单一的记录,这只是吹拂它的逻辑。

+0

是的,最后单数莫尔斯是线索,但也查询意见: this.store.find('comment',{postId:post_id}); ,因为使用普通参数Ember期望单个对象作为响应。通过查询(“{postId:post_id}”)Ember等待一个数组。 – 2014-10-01 21:46:22

相关问题