如何在ember中省略属性

时间:2013-05-31 08:12:28

标签: ruby-on-rails serialization ember.js ember-data

为了保持Ember的集中并最大限度地减少数据传输,我在一些模型上“缓存”了一些属性。示例:因为我只需要作者的名字,所以我将其缓存到书中:

在Rails中:Book has_one:author 在Ember:Book author_name:DS.attr(“string”)

因此在Rails中我计算author_name并使用json数据发送它。

现在,如果我尝试将数据发送回服务器,我需要省略缓存的属性。

我尝试在书模型中覆盖“序列化”,但这没有效果(这让我感到奇怪和不合逻辑)。

最终我在我的适配器中覆盖了addAttribute。所以我现在用:

adapter: DS.RESTAdapter.extend
  serializer: DS.RESTSerializer.extend
    addAttribute: (hash, key, value)->
      cached_keys = [ "author_name", "more" ]
      this._super(hash, key, value) unless cached_keys.contains(key)

但现在这些属性已不再与“Book”相关联。更重要的是,我在其他模型上有更多的缓存属性,但在这里它们都是混合在一起的。我无法想象这是解决问题的最佳方法。有更好的想法吗?

1 个答案:

答案 0 :(得分:0)

我不是最新的主人,但是我覆盖addAttributes而不是addAttribute。在其中我设置了一个switch语句,使用record.constructor来序列化或不序列化值。

示例:

App.Serializer = DS.RESTSerializer.extend
  addAttributes: (data, record) ->
    switch record.constructor
      when App.Post
        record.eachAttribute (name, attribute) =>
          @_addAttribute(data, record, name, attribute.type) if name != "created_at"
      else
        @_super(data,record)