我正在尝试将复杂的json对象(具有嵌套属性)绑定到GridPanel的列模型。 IE:我想将网格列映射到例如report.customer_name和report.report_data.customer.desc 测试数据:
> {
> "success": true ,
> "total": "1",
> "result":
> {
> "report": {
> "customer_name": "cust one",
> "account_number": "",
> "report_data": {
> "detail": "these are details",
> "desc": "mydesc"
> }
> }
> } }
所以我的columnmodel就像
var colModel = new Ext.grid.ColumnModel([
{header: "Customer", sortable: true, dataIndex: 'customer_name'},
{header: "Account", width: 75, sortable: true, dataIndex: 'account_number'},
{header: "Detail", width: 75, sortable: true, dataIndex:'HOW DO I DO THIS'}
]);
我尝试将详细信息列的dataIndex设置为'report_data.details',但它无效...
有人可以告诉我是否可以这样做,如果可以的话,举个例子吧? 或者我只是需要在阅读之前“展平”对象? 非常感谢!
答案 0 :(得分:10)
如果您使用的是JsonReader或JsonStore,则可以在记录描述中建立到嵌套对象值属性的映射:
new Ext.data.JsonReader({
root: 'result',
totalProperty: 'total',
fields: [
{name: 'customer_name'},
{name: 'account_number'},
{name: 'detail', mapping: 'report_data.detail'}
]
});
然后,您的列模型将引用该列的“详细信息”的dataIndex。
然而,您的服务器发送的数据必须与您的示例包含的数据略有不同。上面的读者将使用以下形式的数据对象:
{
"success": true,
"total": 1,
"result": [
{
"customer_name": "cust one",
"account_number": "",
"report_data": {
"detail": "these are details",
"desc": "mydesc"
}
}
]
}