0

新しいモデルが RESTAdapter で作成および保存されると、バックエンドが ID 生成を担当するため、その Id プロパティは未定義になります。したがって、グリッドに戻ると、同じエンティティが 2 つあります。1 つ目は空の Id (RESTAdapter キャッシュからだと思います) で、2 つ目はバックエンドから返された正しい ID です。

何か案は?RESTAdapter キャッシュを無効にすることは可能でしょうか?

アップデート

エンティティ作成のための私のコード。

    submit:function () {
        var manager = App.store.createRecord(App.Manager, {
            firstName:this.get('firstName'),
            lastName:this.get('lastName'),
            speciality:this.get('speciality')
        });

        App.store.commit();

        this.get('controller').transitionTo('managers');
        return false;
    }

新しいアップデート

Mike Grassotti のヒントに感謝します。ここに私の問題の詳細があります。

  1. あるアンチティには ID があり、別のアンチティには ID がありません。
  2. App.store.commit() コードを削除すると、サーバーへの POST はなく、ID のないエンティティのみが表示されます。
  3. このエンティティには、isLoaded=false と isError=true があります。
4

2 に答える 2

3

新しいモデルを作成してRESTAdapterで保存すると、バックエンドがIDの生成を担当するため、そのIdプロパティは未定義になります。

そうですが、これについては珍しいことではありません。emberは、IDの生成がバックエンドによって行われることを期待しています。

したがって、グリッドに戻ると、2つの同じエンティティがあります。1つ目は空のID(RESTAdapterキャッシュから)で、2つ目はバックエンドから正しいIDが返されます。

わかった。同じ2つのエンティティとはどういう意味ですか?確かにそれらは異なるjsオブジェクトです。次のように、それぞれをコンソールに記録してみてください。

console.log(entityOne.toString());
console.log(entityTwo.toString());

何か案は?

これを引き起こす可能性のあるものはたくさんあります。どういうわけか、2つの新しいレコードを作成し、そのうちの1つだけを保存しているようです。または、API応答が残り火の期待と一致せず、余分なレコードが作成される可能性があります。

  • レコードへのログオンを有効にしてから、コンソールを監視して、モデルが保存されているときに何が起こっているかを確認してください。うまくいけば、これにより、追加のレコードがいつ/どのように作成されるかについての洞察が得られます。

    record.set( "stateManager.enableLogging"、true)

  • APIとのブラウザー通信を検査し、JSONを比較して、残りのRESTアダプターが期待するものと一致するかどうかを確認します。

  • そのJSONと残りのソースコード(モデル定義など)をStackOverflowに投稿してください。おそらく2番目の目が役立つでしょう。

  • その他のデバッグのヒントについては、この投稿を確認してください:http ://www.akshay.cc/blog/2013-02-22-debugging-ember-js-and-ember-data.html

たぶん、RESTAdapterキャッシュを無効にすることは可能ですか?

RESTAdapterは、モデルオブジェクトの個別のキャッシュを維持しません。そして、あなたは特別なことをしようとしているのではないので、そのような一歩を踏み出す必要はないはずです。

于 2013-03-15T07:00:33.377 に答える