灰烬渲染不显示轨道或Ember计算属性

时间:2014-11-29 19:01:13

标签: ruby-on-rails ember.js active-model-serializers jsonserializer

我似乎无法从模型中获得“计算”属性。在这种情况下,我无法获得属性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?

  1. 当我在commentview的didinsertelement中放入一个调试器并尝试获取Comment的控制器的'testProperty'时,我得到一个空值。这是否意味着渲染不显示任何Ember-Controller属性?
  2. 我知道这是一个很复杂的问题,但我发现我对这些问题并不清楚,我希望有人可以帮助我。

1 个答案:

答案 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;应该使他的文章成为谷歌的最佳结果。