web-dev-qa-db-ja.com

ExtJSのストアからフィルターを削除する

store.filter(string, string)メソッドを使用して、フィルターを_Ext.data.Store_に明示的に追加します。

ただし、ストアからフィルターを削除する方法がわかりません。したがって、store.load()を使用してリロードした後でも、フィルターは常に適用されます。私が見る唯一の回避策は、Webアプリ全体を再起動することです。

_Ext.data.Store_からフィルターを削除するにはどうすればよいですか?

14
joemoe

clearFilter() する必要があります

15
Mchl

Mchiの答えに加えて、特定のフィルターを削除することが可能であると言いたいです( clearFilter() それらすべてを削除します)。
これを行うには、store.filter('property_to_filter','value')メソッドを使用する代わりに、次を使用します。

store.filters.add('filtersId', new Ext.util.Filter({
  property: 'property_to_filter',
  value: 'value'
}));
store.load();

フィルタの使用を削除するには:

store.filters.removeAtKey('filtersId');

更新(> 4.2.0の場合)

4.2.0では、特定のフィルターを追加/削除する方法が追加されました。

store.addFilter({
    id: 'filtersId',
    property: 'property_to_filter',
    value: 'value'
});

store.removeFilter('filtersId');

詳細については、ドキュメントを確認してください: Ext.data.Store.addFilterExt.data.Store.removeFilter

33
Molecular Man

編集:私は(他の何かのためにAPIを閲覧して)それがさらに簡単であることに気づきました。 remoteFilterを使用するときにtrueの場合、データを再ロードしないパラメーター(ブール値)があります...

だからここに行く:

_store.clearFilter(true);
store.filter(...);
_

ソース: ストアAPI> clearFilter

そんなに長い間苦労したなんて信じられません。私が見たすべてのフォーラムで、リモートフィルタリングに役立たないclearFilterを見ました、そして私がしなければならなかったのは「真」を追加することだけでした...

元の投稿:

clearFilter()する必要があります」

IMO、これは絶対に満足のいくものではありません。サーバーバックエンドを使用してデータを取得する場合(多くの場合)、remoteSortおよびremoteFilter +ページングを使用して大きな結果セットを管理する場合、それは役に立たないことさえあります。

clearFilter()を呼び出すと、フィルターを再適用する前に実際にデータが再ロードされます。したがって、フィルターが適用されるたびに2つのajaxリクエストが送信されます。これは長い間maを悩ませてきました。

あなたがしなければならないのは実際には:

_store.filters.clear(); // Which is what clearFilter() does just before reloading the data...
store.filter(...);
_
4
Wam31