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)
しかし、属性は「本」にリンクされなくなりました。さらに、他のモデルにはキャッシュされた属性がもっとありますが、ここではそれらがすべて混ざり合っています。これが問題を解決する最善の方法だとは思えません。より良いアイデアはありますか?