ExtJS स्टोर से JSON डेटा ऐरे को कैसे पुनर्प्राप्त करें




(10)

आपको किसी भी लूप को बनाने और डेटा को एकत्र / पुन: संसाधित करने की आवश्यकता नहीं है। आपको जिस जेसन ऑब्जेक्ट की आवश्यकता है वह यहां है:

var jsonData = store.proxy.reader.jsonData;

क्या कोई तरीका है जो मुझे अपने संग्रहित डेटा को एक एक्स्टजेस ग्रिड पैनल में वापस करने की इजाजत देता है जिस तरह से मैंने इसे लोड किया है:

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

मैं ग्रिड को फिर से लोड करने के लिए एक उपयोगकर्ता विकल्प चाहता हूं, लेकिन स्टोर में बदलावों को ध्यान में रखना आवश्यक है। उपयोगकर्ता परिवर्तन कर सकता है और ग्रिड गतिशील रूप से अपडेट किया गया है, लेकिन अगर मैं ग्रिड को फिर से लोड करता हूं, तो मूल रूप से लोड किया गया डेटा दिखाया गया है, भले ही डेटाबेस को नए बदलावों के साथ अद्यतन किया गया हो। मैं पृष्ठ को फिर से लोड नहीं करना चाहूंगा और बस उन्हें नए बदले हुए स्टोर के साथ ग्रिड डेटा को पुनः लोड करने दें।

मुझे लगता है कि मैं इस तरह कुछ ढूंढ रहा हूं:

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

सब कुछ कहा और किया के बाद। या ग्रिड को नए डेटा के साथ रीफ्रेश करने का एक अलग तरीका है जिसे मैं नहीं जानता हूं। प्रॉक्सी का उपयोग करने से भी "मूल" डेटा का उपयोग होता है, न कि नई दुकान।


इसे इस्तेमाल करे:

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

एक लाइन दृष्टिकोण:

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

बहुत सुंदर नहीं है, लेकिन काफी छोटा है।


ऐसा करने का एक आसान तरीका है

var jsonArray = store.data.items

तो अगर आपका JSON स्टोर है

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

फिर आप "डीईएफ" को पुनः प्राप्त कर सकते हैं

jsonArray[1].data.text

निम्नलिखित कोड में, मैंने देखा कि यह प्रत्येक चरित्र को एक सरणी आइटम में परिवर्तित करता है।

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

मेरे मामले में मैं एक्स्ट ग्रिड स्टोर की सामग्री के आधार पर एक जावास्क्रिप्ट jagged सरणी जैसे [["row1Cell1", "row1cell2"], ["row2Cell1", "row2cell2"]] चाहता था।

नीचे दी गई जावास्क्रिप्ट ऐसी ऑब्जेक्ट तैयार करेगी, जिस ऑब्जेक्ट की मुझे आवश्यकता नहीं थी उसमें आईडी कुंजी छोड़ना।

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);
});

मैं किसी भी घटक को बाध्य किए बिना स्टोर से डेटा तक पहुंचने का प्रयास करने में परेशानी के अपने हिस्से में भाग लेता हूं, और इसमें से अधिकांश इसलिए था क्योंकि स्टोर को अजीब लोड किया गया था, इसलिए डेटा पढ़ने के लिए लोड इवेंट का उपयोग करना पड़ा। यह काम किया:

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

यदि आप डेटा को वही प्राप्त करना चाहते हैं जो आपको Writer द्वारा मिलता है (उदाहरण के लिए persist:false फ़ील्ड को अनदेखा करना persist:false कॉन्फ़िगरेशन), निम्न कोड का उपयोग करें (नोट: मैंने इसे EX 5.1 में परीक्षण किया है)

  var arr = [];   

    this.store.each(function (record) {
        arr.push(this.store.getProxy().getWriter().getRecordData(record))
    });  

यहां एक और आसान साफ ​​तरीका है:

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

 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;
    }

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 का उपयोग करें यह सरणी में परिवर्तित हो जाएगा