我似乎无法从模型中获得“计算”属性。在这种情况下,我无法获得属性commented_by
我的应用程序结构非常简单:我有一个有许多注释的Post模型。在我显示帖子的post.hbs中,我有一个部分呈现与此帖子相关的所有评论,如下所示:
{{#each comment in comments}}
{{render "comment" comment}}
{{/each}}
我的评论模型(在Rails中)如下:
class Comment < ActiveRecord::Base
extend ActsAsTree::TreeView
belongs_to :post
belongs_to :user
def commented_by
self.user.username
end
end
它的后续序列化器如下:
class CommentSerializer < ActiveModel::Serializer
embed :ids, include: true
attributes :id,
:parent_id,
:body,
:created_at,
:updated_at,
:post_id,
:user_id,
:commented_by
belongs_to :post
belongs_to :comment
has_many :children, include: true, root: :comments
end
因此我打算序列化commented_by'计算属性'并将其发送出去。现在,在客户方面:
我的余烬评论模型如下:
App.Comment = DS.Model.extend({
parentID: DS.attr('number'),
body: DS.attr('string'),
createdAt: DS.attr('date'),
updatedAt: DS.attr('date'),
postID: DS.attr('number'),
userID: DS.attr('number'),
commentedBy: DS.attr('string'),
post: DS.belongsTo('post', {async: true}),
});
我猜路线,控制器和视图也可能是相关的:
App.CommentRoute = Ember.Route.extend({
model: function(params){
return this.store.find('comment', params.id);
},
})
App.CommentView = Ember.View.extend({
templateName: 'comments/comment',
});
App.CommentController = Ember.ObjectController.extend({
testProperty: "hello"
})
因此,我的问题是: 1.(主要问题:)为什么没有在客户端填充commented_by属性? (服务器端控制台明智地显示它很好。)
跟进问题: 我注意到我收到的最后一次服务器调用是GET / posts / 2。这是否意味着Ember的渲染没有打电话来获得帖子的评论?我仍然有评论显示,但是,不是commented_by属性(所有其他属性都在数据库中,在列中。),所以我只能猜测Ember没有通过comment_controller.rb中的show动作;如果是这样,我如何正确序列化数据以包括commented_by?
我知道这是一个很复杂的问题,但我发现我对这些问题并不清楚,我希望有人可以帮助我。
答案 0 :(得分:0)
这将是一个加载的答案&#34; ...抱歉:(
您的问题可能在于您的服务器没有按照Ember Data预期的方式响应Ember Data。因为评论和帖子之间存在关系,所以ember数据需要在商店中提供评论和帖子才能正确加载模型。
您有两种选择。您可以像explained here: http://emberjs.com/guides/models/the-rest-adapter/#toc_sideloaded-relationships.
那样侧载数据或者执行所谓的&#34;延迟加载&#34;。在ember中的延迟加载是一个更先进但完全可行(并且一旦它&#34;点击&#34;非常微不足道)。 I have an ember blog example app on github执行延迟加载。您将看到所涉及的一些挑战(我使用的是ember-cli,我高度推荐)。
编辑:watsonbox在github上有一篇很棒的博客文章,我在上面的例子中发现它非常有用。我偏离了一些示例,因为我将商店直接注入到我的适配器中并处理了必要的逻辑,以便不使用&#34; partial&#34;覆盖整个数据。在这个更高的抽象层次上的数据(阅读帖子以解释这个障碍)。我链接它但是由于我的声誉有限,堆栈溢出不会让我失望。谷歌搜索&#39; emberjs延迟加载&#39;应该使他的文章成为谷歌的最佳结果。