2015-11-09 3 views
6

かなり標準のAPIに設定されたUserモデルがあるとします。フロントエンドにはEmberプロジェクトがあり、これにはUserモデルもあります。Ember Dataを使用して複数のモデルをPOSTすることはできますか?

store.createRecord('user', {email: '[email protected]'}).save(); 

これは/api/usersのようなものにPOSTリクエストをオフに送信します:通常の作成呼び出しは、次のようなものになるだろう。しかし、かなり広範なAPIのサポートは、一度に複数のモデルを作成することです。例えば、user: {email: '[email protected]'}の下に単一のオブジェクトを送信するPOST呼び出しの代わりに、users: [{email: '[email protected]'}, {email: '[email protected]'}, ...]のようなオブジェクトの配列を送信します。

これをemberで処理したのは、実行時に複数の作成呼び出しを行うことです。しかし、これはひどく非効率的で、Emberが複数のモデルを同時に保存することをサポートしているかどうか疑問に思っていますか?あなたはEmberでどのようにこれを達成しますか?

答えて

0

Ember Dataについて具体的に質問しているなら、私はそれを行う方法がわかりません(collection/arrayに対してsave()を使用することはできません)。 (例えば、Orbit.JSをチェックすることができます - これはまだ私が行っていないことです)

私はバックエンドにカスタムエンドポイントを持っています。特定のJSONペイロードとリソースを作成します。あなたは通常のajax呼び出しを発行することでそれを行います。この例を参照してください(私のプロジェクトから)。

let content = //get content that you want to post 
let accessToken = this.get('session.session.authenticated.token'); 
Ember.$.ajax({ 
    data: JSON.stringify(content), 
    dataType: 'json', 
    method: 'POST', 
    url: 'path/to/my/custom/end/point', 
    headers: { 
     'Content-Type': 'application/json', 
     'Authorization': `Beader ${accessToken}` 
    } 
    }).then((result) => { 
    // Code for success 
    }, (jqXHR) => { 
    // Code for error 
    }).always(() => { 
    // Code for always/finally 
    }); 

ご覧のとおり、これはすべてのカスタムコードであり、Emberデータストアやモデルを活用していません。これまでのところ、私はより良い答えを見つけられませんでした。

編集:andorovの答えを見た後。私は何か言及するのを忘れた。私はEmber Data 2.0(デフォルトではJSONAPI)を使用していて、EmbeddedRecordsMixin does not workプロパティをJSON APIで使用しています

2

モデルの配列を1つのPOSTリクエストEmber Dataに保存することはできません。

hasMany 'user'の親モデルを保存することができます。EmbeddedRecordsMixinには、関係IDまたは完全レコードのいずれかが含まれます。それだけでhasMany 'user'この目的のために、親モデルを作成する意味があり、あなたのユースケースに応じて、

import DS from 'ember-data'; 

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, { 
    attrs: { 
    users: { embedded: 'always' }, 
    } 
}); 

- あなたのシリアライザは次のようになります。既存のモデルを使用したいが、常にユーザーレコードを埋め込む必要がない場合は、回答はhereです。

モデルを個別に保存する場合は、users.invoke('save')を実行すると、モデルごとにPOSTが実行されます。

関連する問題