Ember模特的“很多人”有很多'关系未加载

时间:2014-04-01 14:32:21

标签: ember.js

我试图围绕ember.js。

我有两个模型,录制和评论(想象一个经典的帖子和评论示例)。

我正在做的是在一个页面上显示所有录音,以及每个录音的所有评论。每个录音旁边都有一个输入框,用于为该录音创建新评论。

现在,一切似乎都运转正常。我可以添加评论,并将其动态添加到该录制的评论列表中。但是当我刷新页面时,不显示注释,只显示记录。

我使用嵌套的{{#each}}循环显示评论,但由于它在动态添加评论时工作正常,我不确定是否会这样做。这个问题。

这里有一个(更新的)JSBin: http://emberjs.jsbin.com/worulexe/12/edit

更新

所以,我已经发现记录模型的关系(评论)不会在加载时填充。那是为什么?

// The models are loaded like this in the IndexRoute
   this.store.find('recording'); // <- this loads all the record models, but doesn't set the "comments" relations.

服务器返回

{
"comments": [{"id":1,"text":"Invisible when page loaded","recording_id":1}],
"recordings":[
{"id":1,"filename":"rec-01.mp3","comment_ids":[1]},
{"id":2,"filename":"rec-02.mp3","comment_ids":[]}
]
}

第一条记录应该有一条评论,但是没有加载?

2 个答案:

答案 0 :(得分:0)

您的JSBin中包含以下代码。

// Default index route
App.Route = Ember.Route.extend({
    ...
});

这不会声明index路由的路由,该路由声明所有生成的路由继承的路由。由于您没有声明任何路由,因此所有路由都会从中继承,并且所有路由将具有相同的模型。请改用App.IndexRoute

这让我想到了第二点。您的ApplicationControllerArrayController延伸,因此它所期望的模型是某种类型的数组。但由于上述原因,您的模型实际上是一个对象,这就是您的each循环未执行的原因。

如果您修复了这些问题并更新了JSBin,我们可以帮助您解决嵌套each循环的根问题(如果它仍然存在问题)。

答案 1 :(得分:0)

终于找到了红润的问题。希望这可以为Ember的文档节省数小时的挫折感和强烈的负面情绪。

事实证明,如果您使用&#34; active_model_serializers&#34; Gem for Rails(ActiveModel :: Serializers)你需要使用Ember&#39; s App.ApplicationAdapter = DS.ActiveModelAdapter.extend()和 App.ApplicationSerializer = DS.ActiveModelSerializer.extend()

Ember是一个很棒的项目,但它的文档让我完全疯了。