0

次のリクエストを行うとしましょう。

App.Phones.find({'country' : 'DE'});

私のバックエンドはいくつかの電話番号で応答します。今私がやります:

App.Phones.find({'country' : 'ES'});

今、私は他の電話番号を取得します。しかし:

App.Phones.all();

「古い」番号と新しい番号を蓄積しています。検索の呼び出しの間にストアをクリーンアップすることは可能ですか? どのように?

で試しましたがApp.Phones.clean();、成功しませんでした ( has no method 'clean')

編集

これは非常に奇妙ですがrecord.destroy();、オブジェクトを呼び出しても (intuitivepixel で提案されているように)、ストアから削除されず、 としてマークされるだけdestroyed=trueです。つまり、ドロップダウンにはまだそのオプションが表示されています。実際にレコードをたどってみると ( all())、破棄された後もレコードが残っていることがわかります。最終的には Ember がそれらをストアから削除するかもしれませんが、それは私にとってはまったく役に立ちませんall()

さらに悪いことに、オブジェクトはそこにありますが、破壊されているため、選択すると表示されますが、選択することはできません!

Ember.A次のように、フィルター処理されたレコードを作成する ( destroyed レコードを削除する)非常に醜いハックを考えることができます。

  1. すべてのレコード (古いレコード) を破棄する
  2. バックエンドから新しいレコードをリクエストする
  3. レコードが受信されたら ( .then)、ストア内のレコード ( .all())、つまり、破棄されたレコードと新しいレコードをウォークします。
  4. destroy編集されていない配列にレコードを追加します
  5. このフィルター処理された配列に選択をバインドします。

これは非常に見栄えが悪く、Ember が特定のレコード タイプのストアを完全かつ確実にクリーンアップできないことに本当に驚いています。

4

2 に答える 2

0

ストアに保存されたレコードを消去するには、次のことができると思います。Phones

App.Phones.find({}); //this will invalidate your cache

しかし明らかに、これはすべての電話番号を取得する新しいリクエストを作成します。

達成したいことに応じてfind()、アプリケーション ルートで使用してから、all()または他のルートで aを使用して、などfilter()を取得することができます。つまり、次のようなことを行うために使用できるメソッドはありません。DEESApp.Phones.clean()

アップデート

あるタイプのレコードをキャッシュから削除するために(手動で)考えられる別の方法は、find()操作の合間にそれらを1つずつ削除することです。たとえば、以下のコードを含む単純なユーティリティ関数を作成し、呼び出しの合間に呼び出しますにfind():

App.Phones.all().forEach(function(record) {
  record.destroy();
});

それが役に立てば幸い。

于 2013-08-11T23:27:45.793 に答える