为了保持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”相关联。更重要的是,我在其他模型上有更多的缓存属性,但在这里它们都是混合在一起的。我无法想象这是解决问题的最佳方法。有更好的想法吗?
答案 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)