如何从ExtJS Store检索JSON数据数组

时间:2010-03-26 21:08:39

标签: extjs

是否有方法允许我在ExtJS网格面板中完全按照我使用的方式返回存储的数据:

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

我希望有一个用户选项来重新加载网格,但需要考虑对商店的更改。用户可以进行更改并且网格会动态更新,但是如果我重新加载网格,即使已使用新更改更新了数据库,也会显示最初加载的数据。我不想重新加载页面,只是让他们用新更改的商店重新加载网格数据。

我想我正在寻找类似的东西:

var data = Store.getData();
//data = ["value1", "value2"]
完成所有说完之后。或者是否有不同的方法使用我不知道的新数据刷新网格。即使使用代理仍然使用“原始”数据,而不是新商店。

15 个答案:

答案 0 :(得分:51)

Store.getRange()似乎正是您要搜索的内容。它会返回Ext.data.Record[] - 记录数组。如果没有传递参数,则返回所有记录。

答案 1 :(得分:49)

单线方法:

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

不是很漂亮,但很短。

答案 2 :(得分:9)

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

答案 3 :(得分:4)

试试这个:

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

答案 4 :(得分:3)

您无需进行任何循环并收集/重新处理数据。你需要的json对象是:

var jsonData = store.proxy.reader.jsonData;

答案 5 :(得分:2)

一种简单的方法是

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

答案 6 :(得分:2)

这是另一种简单的清洁方式:

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

答案 7 :(得分:0)

更好的(IMO)单行方法适用于ExtJS 4,不确定3:

store.proxy.reader.jsonData

答案 8 :(得分:0)

我遇到了一些麻烦,试图从商店访问数据而不将其绑定到组件,而且大多数是因为存储是通过ajax加载的,所以它需要使用load事件来读取数据。这很有效:

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

答案 9 :(得分:0)

我总是使用store.proxy.reader.jsonDatastore.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);
});

这仅在商店读取操作后立即生效(尚未操作)。

答案 10 :(得分:0)

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它将转换为数组

答案 11 :(得分:0)

如果您希望获得与std::function完全相同的数据(例如忽略带有std::function config的字段),请使用以下代码(注意:我在Ext 5.1中测试过它)< / p>

Writer

答案 12 :(得分:0)

如上所述,我在下面尝试了失败。

store.proxy.reader.jsonData

但低于一个为我工作

store.proxy.reader.rawData

答案 13 :(得分:0)

在我的情况下,我想要一个javascript jagged数组,例如[[“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);
});

答案 14 :(得分:0)

试试这行代码,就像魅力一样对我有用:

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