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