私はEmber.jsを試しており、ユーザーがログインおよびログアウトできる小さなアプリをセットアップしました。ユーザーがログアウトしたら、データストアに現在キャッシュされているすべてのレコードをクリアしたいと思います。これを行う方法はありますか、それともブラウザにページをリロードさせる必要がありますか?
7 に答える
この質問は2013年のものです。しかし、Ember Data 1.0.0-beta.17(2015年5月10日)以降、データストアをクリアする簡単な方法があります。
store.unloadAll()
(詳細はこちら:http ://emberigniter.com/clear-ember-data-store/ )
今日の時点では、ストアのクリーンアップを完全に強制する一般的な方法はまだないようです。person
最も単純な回避策は、すべてのタイプ( 、...)をループして、次のことを行うようです。
store.unloadAll('person');
ここに見られるように
データストアのクリアは、Ember-Dataではまだサポートされていません。Githubトラッカーには、これに関する未解決の問題があります。
よりクリーンで一般的なアプローチ。ストアを拡張または再開して、このような明確なメソッドを追加するだけです。
DS.Store.extend({
clear: function() {
for(var key in this.typeMaps)
{
this.unloadAll(this.typeMaps[key].type);
}
}
});
がある:
App.reset();
しかし、それはデータストアをクリアするだけではなくstore.pushPayload
、呼び出しによって破棄されたとマークされたオブジェクトにデータをプッシュしようとするエラーが発生することがありますApp.reset();
。
私たちが使用してきた:
store.init();
これは、新しい空のストアを作成してうまく機能しますが、残念ながらプライベートメソッドです。
これは、で実行できるようになりましたstore.destroy()
。すべてのレコードをアンロードしますが、新しいレコードのリロードにすぐに使用することもできます。これを確認しました1.0.0-beta.15
。ドキュメントには記載されていないようですが、私にとってはうまくいっています。
別の方法は、ストアを繰り返してtypeMaps
実行するstore.unloadAll(typeMap.typeName)
ことですが、それが完全に必要かどうかはわかりません。
モデル内のレコードごとにレコードを削除します。このjsBindeleteOrgs
の:
deleteOrgs: function(){
var len;
while(len = this.get('model.length')) {
// must delete the last object first because
// this.get('model.length') is a live array
this.get('model').objectAt(len-1).deleteRecord();
}
this.get('store').commit();
}
(2013年8月現在、削除されたデータの残留に問題があります。)