1

次のように定義された UserSession モデルがあります。

App.UserSession = DS.Model.extend({
  authToken: attr('string'),
  firstName: attr('string'),
  lastName: attr('string')
});

ユーザーがログインしているとき、次のような JSON 表現を返す AJAX POST リクエストをバックエンドに送信しています。

{
  "user_session": {
    "id": 1,
    "auth_token": "token_here",
    "first_name": "John",
    "last_name": "Doe"
  }
}

通常、次のようにすると、Ember Data が自動的に JSON をシリアル化し、オブジェクトを追加します。

App.UserSession.find(<session-id>);

手動で AJAX 呼び出しを行っている場合、返された JSON を手動でデシリアライズせずに Ember Data ストア オブジェクトにロードする簡単な方法はありますか?

明確にするために編集:

以下は機能しませんが、上記のことを実行する関数を見つけたいと思っています。これは、以下の呼び出しに似ている可能性があります。

App.UserSession.load(<session-json>);
4

2 に答える 2

5

最新バージョン(11)のember-dataを使用している場合は、データのロードに重大な変更があります。

データのロード

以前は、load()などのストアの一部の機能は、単一のアダプターを想定していました。

アプリケーションがデータを要求せずに(たとえば、WebSocketストリームを介して)バックエンドからデータをロードする場合は、次のAPIを使用します。

store.adapterForType(App.Person).load(store, App.Person, payload);

このAPIは、サイドロードされたデータと埋め込まれたデータも処理します。将来的には、このAPIのより便利なバージョンを追加する予定です。

https://github.com/emberjs/data/blob/master/BREAKING_CHANGES.md#loading-data

ストアのインスタンスを取得する必要があります。コントローラを使用している場合は、次のことができます。

@get('store')

次のこともできます。

App.__container__.lookup('store:main')

変更されないことが保証されていない内部API(コンテナ呼び出しを囲む__で示されている)を使用しているため、これはお勧めしません。

ストアのインスタンスを取得したら、UserSessionにロードできます。

@get('store').adapterForType(App.UserSession).load(@get('store'), App.UserSession, sessionJson['user_session']);
于 2013-02-15T22:24:50.007 に答える