0

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

在 Rails 中:书籍 has_one :author 在 Ember 中:书籍 author_name:DS.attr("string")

因此,在 Rails 中,我计算 author_name 并将其与 json 数据一起发送。

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

我尝试在 Book 模型中覆盖“序列化”,但这没有任何效果(这让我觉得奇怪且不合逻辑)。

最终,我覆盖了适配器中的 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)

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

4

1 回答 1

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)
于 2013-05-31T23:58:26.813 回答