【问题标题】:how to omit attributes in ember如何在ember中省略属性
【发布时间】:2013-05-27 00:09:16
【问题描述】:

为了让 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)

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

【问题讨论】:

  • 我会用ember-data标记这个问题。
  • @MehulKar 我已经添加了 ember-data,谢谢

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


【解决方案1】:

我不在最新的 master 上,但我覆盖 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)

【讨论】:

  • 感谢您的回答。我会尽快尝试的。它当然看起来更好。 Ember 不使用帖子序列化方法有什么原因吗? (或者甚至为什么你不在你的第五行:record.serialize + 在 post 类中覆盖序列化)。
  • 这是个好问题,我不确定。看起来DS.Model 有一个serialize 函数,它基本上调用了DS.Store 的序列化函数,该函数调用了适配器,该适配器调用了序列化程序,最终落在了这里。但不确定链条从哪里/如何开始。
猜你喜欢
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-06
  • 1970-01-01
  • 2021-09-16
  • 2017-08-18
  • 2012-07-01
相关资源
最近更新 更多