【问题标题】:Ember render not showing rails or Ember computed propertiesEmber 渲染未显示轨道或 Ember 计算属性
【发布时间】:2014-11-29 19:01:12
【问题描述】:

我似乎无法从模型中获取“计算”属性。在这种情况下,我无法获得属性 commented_by

我的应用程序结构非常简单:我有一个包含许多 cmets 的 Post 模型。在我显示帖子的 post.hbs 中,我有一个部分呈现与该帖子关联的所有 cmets,如下所示:

        {{#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 '计算属性'并将其发送。现在,在客户端:

我的ember评论模型如下:

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属性没有在客户端填充? (服务器端控制台显示得很好。)

跟进问题: 2. 我注意到我收到的最后一个服务器调用是 GET /posts/2。这是否意味着 Ember 的渲染不会调用来获取帖子的 cmets?不过,我仍然有 cmets 显示,只是没有显示 commented_by 属性(所有其他属性都在数据库中,在列中。),所以我只能猜测 Ember 没有通过 comment_controller.rb 中的显示操作;如果是这样,我如何正确序列化数据以包含 commented_by?

  1. 当我将调试器放入评论视图的 didinsert 元素并尝试获取评论控制器的“testProperty”时,我得到一个空值。这是否意味着渲染不显示任何 Ember-Controller 属性?

我知道这是...一个加载的问题,但我发现我不清楚这些问题,我希望这里有人可以帮助我。

【问题讨论】:

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


    【解决方案1】:

    这将是一个“加载的答案”......对不起:(

    您的问题可能在于您的服务器未按照 Ember Data 预期的方式响应 Ember Data。因为您在 cmets 和 post 之间有关系,所以 ember 数据需要在 store 中同时提供 cmets 和 posts 才能正确加载模型。

    你有两个选择。要么像explained here: http://emberjs.com/guides/models/the-rest-adapter/#toc_sideloaded-relationships.那样旁加载你的数据

    或者执行所谓的“延迟加载”。 ember 中的延迟加载稍微高级一点,但完全可行(一旦“点击”就非常简单)。 I have an ember blog example app on github 进行延迟加载。您会看到其中的一些挑战(我使用了我强烈推荐的 ember-cli)。

    编辑:watsonbox 在 github 上有一篇很棒的博客文章,我发现在制作上述示例时非常有用。我与示例有所不同,因为我将存储直接注入到我的适配器中,并在更高的抽象级别处理了不使用“部分”数据覆盖完整数据的必要逻辑(阅读帖子以了解此障碍的解释)。我会链接它,但由于我的声誉有限,堆栈溢出不会让我这样做。谷歌搜索“emberjs 延迟加载”应该会使他的文章成为谷歌搜索结果。

    【讨论】:

      猜你喜欢
      • 2014-03-01
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 2015-09-20
      • 2014-05-26
      相关资源
      最近更新 更多