ASP.NET的安全功能之一被证明是一个可扩展的山峰 - 当我尝试动态重新配置网格面板时,返回JSON响应时添加“d”属性似乎令人困惑,导致它失败时试图生成新的列结构。
我遵循了nicholasnet的这个解决方案: http://www.sencha.com/forum/showthread.php?179861-Dynamic-grid-columns-store-fields
并且它可以很好地工作,直到JSON有效负载包裹在“d”属性中,例如
{"d":{
"metaData": {
"root": "data",
"fields": [{
"type": "int",
"name": "id",
"hidden": true,
"header": "id",
"groupable": false,
"dataIndex": "id"
}, ...omitted for brevity...]
},
"success": true,
"data": [{
"id": "1",
"controller": "Permissions",
"description": "Allow to see permission by roles",
"administrator": true,
"marketing": false
}]
}
}
我无法弄清楚如何告诉ExtJS绕过这个问题。 我尝试将AJAX阅读器的“root”属性设置为"d.data"
,但这会导致网格显示正确的行数但根本没有数据。
我已经在JSON中列元数据("name", "header", "dataIndex")
所需的所有属性描述符,所以我不认为JSON结构是原因。我目前的主要领导是在事件处理程序上:
store.on
({
'load' :
{
fn: function(store, records, success, operation, eOpts)
{
grid.reconfigure(store,store.proxy.reader.fields);
},
scope: this
}
}, this);
当我传递“d”包装的JSON时,fields
部分中的historyStore.proxy.reader.fields
未定义。任何人对于为什么会这样或如何解决这个问题都有任何想法?
编辑:我的商店/代理
Ext.define('pr.store.Store-History', {
extend: 'Ext.data.Store',
model: 'pr.model.Model-History',
proxy: {
type: 'ajax',
url: '/data/history.json',
reader: {
type: 'json',
root: 'd'
}
}
});
答案 0 :(得分:1)
Ext.define('pr.store.Store-History', {
extend: 'Ext.data.Store',
model: 'pr.model.Model-History',
proxy: {
type: 'ajax',
url: '/data/history.json',
reader: {
type: 'json',
root: 'data',
readRecords: function(data) {
//this has to be before the call to super because we use the meta data in the superclass readRecords
var rootNode = this.getRoot(data);
if (rootNode.metaData) {
this.onMetaChange(rootNode.metaData); // data used to update fields
}
/**
* @deprecated will be removed in Ext JS 5.0. This is just a copy of this.rawData - use that instead
* @property {Object} jsonData
*/
this.jsonData = rootNode;
return this.callParent([rootNode]); // data used to get root element and then get data from it
},
}
}
});
<强>更新强> 您没有在阅读器中获取字段,因为从数据获取字段的默认代码无法处理您的包装数据,因此您需要更改“readRecords”函数来处理您的自定义数据