web-dev-qa-db-ja.com

ExtJSストアからJSONデータ配列を取得する方法

ExtJS Grid Panelに保存されたデータを、使用してロードした方法とまったく同じ方法で返すことができるメソッドはありますか?

var data = ["value1", "value2"]
Store.loadData(data);

グリッドをリロードするユーザーオプションが必要ですが、ストアへの変更を考慮する必要があります。ユーザーは変更を加えることができ、グリッドは動的に更新されますが、グリッドを再ロードすると、データベースが新しい変更で更新されていても、最初にロードされたデータが表示されます。ページをリロードせずに、新しく変更されたストアでグリッドデータ自体をリロードできるようにしたいと思います。

私はこのようなものを探していると思います:

var data = Store.getData();
//data = ["value1", "value2"]

そのすべてが言って完了した後。または、私が知らない新しいデータでグリッドを更新する別の方法があります。プロキシを使用しても、新しいストアではなく「元の」データが使用されます。

39
sctskw

Store.getRange() はまさにあなたが探しているもののようです。 Ext.data.Record[]-レコードの配列。引数が渡されない場合、すべてのレコードが返されます。

52
Li0liQ

1行のアプローチ:

var jsonData = Ext.encode(Ext.pluck(store.data.items、 'data'));

あまりきれいではありませんが、かなり短いです。

50
gambetti
 function getJsonOfStore(store){
        var datar = new Array();
        var jsonDataEncode = "";
        var records = store.getRange();
        for (var i = 0; i < records.length; i++) {
            datar.Push(records[i].data);
        }
        jsonDataEncode = Ext.util.JSON.encode(datar);

        return jsonDataEncode;
    }
9
Jakofff

これを試して:

myStore.each( function (model) {
    console.log( model.get('name') ); 
}); 
4
Yasser Farghaly

ループを作成してデータを収集/再処理する必要はありません。必要なjsonオブジェクトは次のとおりです。

var jsonData = store.proxy.reader.jsonData;
3
PatlaDJ

これを行う簡単な方法は

var jsonArray = store.data.items

あなたのJSONストアが

[{"text": "ABC"}, {"text": "DEF"},{"text": "GHI"},{"text": "JKL"}]

その後、次のように「DEF」を取得できます

jsonArray[1].data.text

次のコードでは、すべての文字を配列項目に変換することに気付きました。

var jsonData = Ext.encode(Ext.pluck(store.data.items, 'data'));
2
Shashwat

別の簡単でクリーンな方法を次に示します。

var jsonArr = [];
grid.getStore().each( function (model) {
    jsonArr.Push(model.data);
});
2
Rocco

私は常にstore.proxy.reader.jsonDataまたはstore.proxy.reader.rawData

たとえば、これは 'data'と呼ばれるルートノードにネストされたアイテムを返します。

var some_store = Ext.data.StoreManager.lookup('some_store_id');
Ext.each(some_store.proxy.reader.rawData.data, function(obj, i){
   console.info(obj);
});

これは、ストアの読み取り操作の直後にのみ機能します(まだ操作されていません)。

0
Martin Zeitler

Writerで取得するものとまったく同じデータを取得する場合(たとえば、persist:false configのフィールドを無視する)、次のコードを使用します(注:Ext 5.1でテストしました)

  var arr = [];   

    this.store.each(function (record) {
        arr.Push(this.store.getProxy().getWriter().getRecordData(record))
    });  
0
Mahmoud Moravej
proxy: {
        type: 'ajax',
        actionMethods: {
            read: 'POST',
            update: 'POST'
        },
        api: {
            read: '/bcm/rest/gcl/fetch',
            update: '/bcm/rest/gcl/save'
        },
        paramsAsJson: true,
        reader: {
            rootProperty: 'data',
            type: 'json'
        },
        writer: {
            allowSingle: false,
            writeAllFields: true,
            type: 'json'
        }
    }

AllowSingleを使用して配列に変換します

0
Medini Patki

より良い(IMO)1行アプローチは、ExtJS 4で動作しますが、3についてはわかりません:

store.proxy.reader.jsonData
0
George Jempty

上記で提案したように、私は以下で失敗したものを試しました。

store.proxy.reader.jsonData

しかし、以下は私のために働いた

store.proxy.reader.rawData
0
Ravi MCA

コンポーネントにバインドせずにストアからデータにアクセスしようとするとトラブルが発生しますが、そのほとんどはストアがajaxを介してロードされたため、データを読み取るためにloadイベントを使用する必要がありました。これはうまくいきました:

store.load();
store.on('load', function(store, records) {
    for (var i = 0; i < records.length; i++) {
    console.log(records[i].get('name'));
    };
});
0
Danny

私の場合、javascriptのジャグ配列が必要でした。 [["row1Cell1"、 "row1cell2"]、["row2Cell1"、 "row2cell2"]]は、Extグリッドストアのコンテンツに基づいています。

以下のjavascriptはこのような配列を作成し、必要のないオブジェクトにidキーをドロップします。

var tableDataArray = [];
Ext.ComponentQuery.query('[name="table1"]')[0].store.each(function(record){
    var thisRecordArray = [];
    for (var key in record.data) {
        if (key != 'id') {
            thisRecordArray.Push(record.data[key]);
        }
    }
    tableDataArray.Push(thisRecordArray);
});
0
PST