ext js - ColumnModel绑定到复杂的json对象

时间:2009-11-27 19:24:09

标签: extjs

我正在尝试将复杂的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',但它无效...

有人可以告诉我是否可以这样做,如果可以的话,举个例子吧? 或者我只是需要在阅读之前“展平”对象? 非常感谢!

1 个答案:

答案 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"
            }
        }
    ]
}