是否有方法允许我在ExtJS网格面板中完全按照我使用的方式返回存储的数据:
var data = ["value1", "value2"]
Store.loadData(data);
我希望有一个用户选项来重新加载网格,但需要考虑对商店的更改。用户可以进行更改并且网格会动态更新,但是如果我重新加载网格,即使已使用新更改更新了数据库,也会显示最初加载的数据。我不想重新加载页面,只是让他们用新更改的商店重新加载网格数据。
我想我正在寻找类似的东西:
var data = Store.getData();
//data = ["value1", "value2"]
完成所有说完之后。或者是否有不同的方法使用我不知道的新数据刷新网格。即使使用代理仍然使用“原始”数据,而不是新商店。
答案 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.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);
});
这仅在商店读取操作后立即生效(尚未操作)。
答案 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();