2

テンプレートで参照されるときに、モデルのバインディング関係が自動的にロードされるようにしたいと思います。たとえば、次のようなモデルがある場合:

App.User = DS.Model.extend
    name: DS.attr 'name'

App.Contact = DS.Model.extend
    addedBy: DS.belongsTo 'App.User'

とこのようなビュー:

<div>{{contact.addedBy.name}}</div>

ember-dataが、「addedBy」の主キーを使用してユーザーをロードする必要があることに気付いた場合、それは本当に素晴らしいことです。現在、App.User.find(contact.get('addedBy'))を使用してユーザーを手動でロードする必要があります。その後、テンプレートバインディングが更新され、ユーザーの名前が表示されます。

これは非常に単純な例ですが、実際には、関係をかなり遠くまで横断していることに気付くことがあります。これを自動化する簡単な方法はありますか?

皆さん、ありがとう!

4

2 に答える 2

0

連絡先にサービスを提供するときに、関連付けられたユーザーをサイドローディングするのはどうですか?

Railsとactive_model_serializersgemを使用しているとすると、次のContactSerializerようになります。

class ContactSerializer < ActiveModel::Serializer
  embed :ids, :include => true
  #...
  has_one :user
end

そうすることで、連絡先が取得されたときにユーザーが自動入力されます。

ドキュメントを参照してください。

于 2012-10-11T08:46:30.950 に答える
0

ember-dataはデフォルトで私が望むことを正確に実行し、問題は私のコードのバグでした。

アダプタのfindMany()メソッドのバックエンドがIDの引数配列と同じ順序でレコードを返すことを確認してください。そうでない場合、DS.hasManyの関係は非常に奇妙に動作します。

于 2012-10-12T02:31:20.153 に答える