簡體   English   中英

Extjs獲取所有商店記錄

[英]Extjs get all store records

我有一個問題。 當過濾器被添加到商店時,是否可以獲取存儲中加載的所有記錄? 例如,如果我加載到商店34記錄然后應用過濾器並且只剩下15個,我可以在不清除過濾器的情況下獲得這34條記錄嗎?

編輯:這最初是針對Ext 4.2的,其中snapshot是公開的並記錄在案。 它現在已經消失了。 這是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 5 getUnfiltered方法

在Ext 5中的某個時刻引入了getUnfiltered方法(據我所知,5.0.1,但是Ext 5的文檔目前處於脫機狀態......)。 它沒有出現在Ext 5的第一個版本中,它已經被Ext 6消失了。所以,好吧......不要使用它! 除非您想無緣無故地將代碼綁定到Ext 5,否則請使用上述方法。

Ext 4

(原始答案)

整個加載的數據集存儲在商店的snapshot屬性中。

它僅在需要時創建。 這意味着在將某些過濾器應用於商店之前,該屬性將不可用。 因此,要以安全的方式獲取所需信息,請使用:

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

分機4/5/6

(可能是未來的版本)

您可以使用queryqueryBy

這似乎是更向前兼容的方法,因為與以前的方法相反,此API在各個版本中沒有變化。

不幸的是,這將導致收集並產生額外的處理成本......根據您的收藏大小,這可能會或可能不會被忽略。

var allRecords = store
  .queryBy(function() { return true; }) // returns a collection
  .getRange(); // returns array of items

也許更向前兼容的方法(即ExtJS版本> = 5)如下:

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

基於documentaion,這適用於版本> = 5.0。

要從加載的商店中獲取所有未過濾的數據,您可以嘗試var records = store.getUnfiltered();

注意:我使用的是Ext Js 5.1。 對早期版本不確定。

如果你想從http響應中獲取原始記錄 - 這是我的解決方案:

getRawRecords函數添加到store類:

    Ext.override(Ext.data.Store, {
        getRawRecords: function(){
            return Ext.Array.map(this.getData().getRange(), function(record){
                return record.data;
            });
        }
    });

用法:

    var rawData = store.getRawRecords();

對於我使用JSON TreeStore的ExtJS 4.2.1(是的,我知道它已經老了)的情況,我不得不使用: store.proxy.reader.jsonData因為store.snapshotstore.datastore.querystore.queryBy不存在。

在最新的Extjs 6.2.0中,您可以使用

var allRecs = Store.getData().getSource().items

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM