2017-07-05 3 views
1

このトピックは、emberデータの最新バージョンではなく、以前のstackoverflowで議論されていました。少なくとも私が見つけた提案は、私のために働いたことはありません。Ember:設定なしでモデルオブジェクトを編集する

EmberとEmberの最新バージョン(バージョン2.13.0)を使用しています。私はJsonApiAdapterを使用します。

シナリオ

私は、そのプロパティの一部にいくつかの変更をしたいサーバーからレコードをロードした後。これらの変更によりレコードが汚れてはならず、変更された属性はrecord.changedAttributes()に表示されないものとする。それ以降にユーザーが行った変更は、そのレコードを汚れさせるものとします。ソリューション

の検索

私は手動でisDirtyフラグを変更しようとしましたが、それはそれをしませんでした。私はまた、レコードがロードされた後の状態を設定するemberデータコード内の場所を見つけることを試みました(本質的に私は同じことをやろうとしているからです)。 私もrecord.send('pushedData')を試しましたが、私はレコードの状態を何も変更しませんでした。

助けてください。

答えて

3

私はレコードを汚すことなく、サーバの応答を変更することができます3つの方法を知っている:あなたは、アダプタのhandleResponseメソッドをオーバーライドして、右のペイロードに変更を加えることができ

  1. を。

  2. シリアライザのnormalizeメソッドをオーバーライドできます。

  3. Emberを使用してサーバーからレコードをロードすることができます。$。ajaxメソッドは、レスポンスを変更し、ストアのpushPayloadメソッドに渡します。あなたは、サーバーからのすべての負荷(あなたがそれを何ルート/コントローラからどんなに)の後にレコードを変更する必要がある場合

最初の2つの方法が良いです。アダプタとシリアライザはどちらもモデルに固有のものです。 1つの場所(コントローラまたはルート)で行う必要がある場合、またはルート/コントローラの変数へのアクセスが必要な場合は、3番目の方法が良いです。

私は、レコードをダーティー/汚れていないものとしてマークする方法については気づきません。レコードを保存した後に変更すると、レコードがダーティになります。

+1

パーフェクト。 pushPayloadが私のトリックでした。私はそれが変更されるペイロードの一部を送信するだけで、ストア内の既存のレコードを変更するために使用される可能性があることを発見しました。 –

関連する問題