19

一つ質問があります。フィルターがストアに追加されているときに、ストアにロードされているすべてのレコードを取得することは可能ですか? たとえば、ストアに 34 レコードをロードしてフィルターを適用すると、残りが 15 レコードしかない場合、フィルターをクリアせずにそれらの 34 レコードを取得できますか?

4

6 に答える 6

36

編集:snapshotこれはもともと公開され、文書化されているExt 4.2 に対して回答されたものです。それは今日なくなっています。Ext 5 と 6 のアップデートはこちらです。

内線 5 / 6

一発ギャグ:

var allRecords = (store.getData().getSource() || store.getData()).getRange();

分解:

var data = store.getData();
// get unfiltered collection (will be null if the store has never been filtered)
var snapshot = data.getSource();
// pick the one that exists
var unfilteredCollection = snapshot || data;
// get items in an array
var allRecords = unfilteredCollection.getRange();

Store#getDataストアのコレクションを提供します。

Collection#getSourceストアの「ソース」、つまりフィルター処理されていないコレクションを提供しますが、コレクションが既にフィルター処理されている場合にのみ、それ以外の場合は を返しますnull

どちらの場合も、Ext.util.Collection. getRangeアイテムの実際の配列を取得するために使用します。

Ext 5getUnfilteredメソッド

メソッドは Ext 5 のある時点で導入されましたgetUnfiltered(私が知る限り 5.0.1 ですが、Ext 5 のドキュメントは現在オフラインです...)。Ext 5 の最初のバージョンには存在せず、Ext 6 ではなくなりました。理由もなくコードを Ext 5 に結び付けたくない場合を除き、上記の方法を使用してください。

内線 4

(元の回答)

読み込まれたデータセット全体がsnapshotストアのプロパティに保存されます。

ただし、必要な場合にのみ作成されます。つまり、一部のフィルターがストアに適用されるまで、プロパティは利用できません。したがって、安全な方法で必要な情報を取得するには、次を使用します。

var allRecords = store.snapshot || store.data;

内線 4 / 5 / 6

(そしておそらく将来のバージョン)

queryまたはを使用できますqueryBy

以前の方法とは対照的に、この API はバージョン間で変更されていないため、これはより前方互換性のあるアプローチのようです。

残念ながら、それはコレクションをトラバースし、余分な処理コストが発生します...コレクションのサイズによっては、無視できる場合とそうでない場合があります。

var allRecords = store
  .queryBy(function() { return true; }) // returns a collection
  .getRange(); // returns array of items
于 2013-09-06T12:50:56.080 に答える
4

読み込まれたストアからフィルタリングされていないすべてのデータを取得するには、 var records = store.getUnfiltered(); を試すことができます。

注: Ext Js 5.1 を使用しています。以前のバージョンについては不明です。

于 2015-06-16T11:04:12.460 に答える