たぶん、adapter.load
を使用しているこれを行うための公式の方法、described in this threadとして:
は、以前は店のいくつかの機能を
データのロード、などload()
は、 単一のアダプタを仮定しました。
あなたはこの APIを使用して、(例えば、WebSocketをストリームを通じて)それを求めアプリケーション せずにバックエンドからデータをロードする場合:
store.adapterForType(App.Person).load(store, App.Person, payload);
このAPIはまた、サイドロード処理します埋め込みデータ私たちは将来このAPIのより便利なバージョン を追加する予定です。
残念ながら、ドキュメンテーションの主張にもかかわらず、残念ながら、サイドロードされたデータは処理されません。
{
person: {
id: 1,
is_private: false,
projects: [3]
},
projects: [
{ id: 3, name: "FooReader" }
]
}
:このコードは
find(ID)
が
documented in the RESTAdapter guideとして、サーバから受信することを期待するのと同じ形式でJSONを前提としてい
var id = json["person"]["id"];
var store = DS.get("defaultStore");
var adapter = store.adapterForType(App.Person);
adapter.didFindRecord(store, App.Person, json, id);
var person = App.Person.find(id);
注こと:私は個人的にfind(ID)
が実装されている方法に基づいており、以下のようなものを使用します
keyForAttributeName
(マッピングis_private
〜isPrivate
など)を使用して設定したすべての変換が適用され、サイドロードされたレコードが処理されます。これがベストプラクティスなのかどうかは分かりませんが、かなりうまくいきます。
出典
2013-04-09 16:30:08
emk
ありがとう!私は 'didFindRecord'に近かったが、私はその方法で何が起こっているのか十分に分かっていなかった。 – bschaeffer
こんにちは。この処理は、単一のレコードを作成している間は非常にうまく機能します。複数のレコードを設定するにはどうすればよいですか?例:http://pastebin.com/raw.php?i=NNFVDYR0 – Mattia
これまでのところember-data 1.0.0-beta.3ではこれが動作しなくなったと私は知ることができました。私はこれをember-data 0.14私は答えを使用して終了しました。そして、1.00-beta.3で与えられたandorovが終了しました:http://stackoverflow.com/a/18948134/1477165 – bfcoder