如何从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.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); }); 

这只在商店读取操作之后立即起作用(尚未被操纵)。

我遇到了一些麻烦,试图从商店访问数据而不将其绑定到组件,而大部分是因为商店是通过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); });