如何从ExtJS商店检索JSON数据数组
有没有一种方法可以让我以ExtJS Grid Panel的方式返回存储的数据:
var data = ["value1", "value2"] Store.loadData(data);
我想有一个用户选项来重新加载网格,但需要考虑对商店的更改。 用户可以进行更改,并且网格会dynamic更新,但是如果重新加载网格,即使数据库已更新为新更改,也会显示最初加载的数据。 我宁愿不重新加载页面,只是让他们重新加载网格数据本身与新改变的商店。
我想我正在寻找这样的东西:
var data = Store.getData(); //data = ["value1", "value2"]
在所有的说完之后。 还是有不同的方式来刷新我不知道的新数据的网格。 即使使用代理仍然使用“原始”数据,而不是新的商店。 提前致谢
Store.getRange()
似乎正是你正在寻找。 它会返回你Ext.data.Record[]
– logging数组。 如果没有parameter passing,则返回所有logging。
单线方法:
var jsonData = Ext.encode(Ext.pluck(store.data.items,'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; }
尝试这个:
myStore.each( function (model) { console.log( model.get('name') ); });
你不需要做任何循环和收集/重新处理数据。 你需要的json对象在这里:
var jsonData = store.proxy.reader.jsonData;
这是另一个简单的干净方式:
var jsonArr = []; grid.getStore().each( function (model) { jsonArr.push(model.data); });
一个更好的(IMO)单行方法,在ExtJS 4上工作,不确定3:
store.proxy.reader.jsonData
一个简单的方法来做到这一点
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'));
我总是使用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); });
这只在商店读取操作之后立即起作用(尚未被操纵)。
我遇到了一些麻烦,试图从商店访问数据而不将其绑定到组件,而大部分是因为商店是通过ajax加载的,所以它使用load事件来读取数据。 这工作:
store.load(); store.on('load', function(store, records) { for (var i = 0; i < records.length; i++) { console.log(records[i].get('name')); }; });
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将它转换成数组
如果你想得到的数据就像Writer
得到的一样(比如忽略persist:false
config的字段),使用下面的代码(注意:我在Ext 5.1中testing过)
var arr = []; this.store.each(function (record) { arr.push(this.store.getProxy().getWriter().getRecordData(record)) });
如上所示,我尝试了下面的失败。
store.proxy.reader.jsonData
但下面一个为我工作
store.proxy.reader.rawData
在我的情况下,我想要一个JavaScript的锯齿arrays,例如[[“row1Cell1”,“row1cell2”],[“row2Cell1”,“row2cell2”]]基于Ext网格商店的内容。
下面的JavaScript将创build这样一个数组,将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); });