代码之家  ›  专栏  ›  技术社区  ›  sctskw

如何从ExtJS存储中检索JSON数据数组

  •  38
  • sctskw  · 技术社区  · 16 年前

    是否有一种方法允许我以加载数据的方式返回ExtJS网格面板中存储的数据:

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

    我想我在找这样的东西:

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

    说了这么多,做了这么多。或者有没有一种不同的方法来用我不知道的新数据刷新网格。即使使用代理,仍然使用“原始”数据,而不是新存储。

    14 回复  |  直到 8 年前
        1
  •  53
  •   Li0liQ    13 年前

    Store.getRange() 似乎正是你要找的。它会还给你的 Ext.data.Record[] -记录数组。如果没有传递任何参数,则返回所有记录。

        2
  •  53
  •   Navnath Godse Kostiantyn Koval    11 年前

    单线法:

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

    不是很漂亮,但是很短。

        3
  •  9
  •   Jakofff    16 年前
     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;
        }
    
        4
  •  4
  •   Bruno Vieira    13 年前

    试试这个:

    myStore.each( function (model) {
        console.log( model.get('name') ); 
    }); 
    
        5
  •  3
  •   PatlaDJ    12 年前

    您不需要进行任何循环和收集/重新处理数据。您需要的json对象如下:

    var jsonData = store.proxy.reader.jsonData;
    
        6
  •  2
  •   Shashwat    14 年前

    一个简单的方法是

    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'));
    
        7
  •  2
  •   Rocco    12 年前

    下面是另一个简单的干净方法:

    var jsonArr = [];
    grid.getStore().each( function (model) {
        jsonArr.push(model.data);
    });
    
        8
  •  0
  •   Dexygen    15 年前

    store.proxy.reader.jsonData
    
        9
  •  0
  •   Danny    14 年前

    我在尝试访问store中的数据而不将其绑定到组件时遇到了同样的问题,其中大部分是因为store是通过ajax加载的,所以需要使用load事件来读取数据。这起作用了:

    store.load();
    store.on('load', function(store, records) {
        for (var i = 0; i < records.length; i++) {
        console.log(records[i].get('name'));
        };
    });
    
        10
  •  0
  •   Martin Zeitler    13 年前

    我总是用 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);
    });
    

    这只在存储读取操作之后立即起作用(虽然还没有被操作)。

        11
  •  0
  •   Usman Maqbool Tayyab Javed    10 年前
    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它将转换为数组

        12
  •  0
  •   Mahmoud Moravej    9 年前

    如果你想得到和你所得到的完全一样的数据 Writer persist:false config),使用以下代码(注意:我在ext5.1中测试了它)

      var arr = [];   
    
        this.store.each(function (record) {
            arr.push(this.store.getProxy().getWriter().getRecordData(record))
        });  
    
        13
  •  0
  •   Ravi MCA    8 年前

    正如上面提到的,我试了一次,但失败了。

    store.proxy.reader.jsonData
    

    但下面一个对我有用

    store.proxy.reader.rawData
    
        14
  •  0
  •   PST    8 年前

    在我的例子中,我需要一个基于Ext grid store内容的javascript锯齿数组,例如[[“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);
    });
    
        15
  •  0
  •   M.A.K. Ripon Technastar    6 年前

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