如何在EXTJS 4网格中显示嵌套的Json数据?

12

我正在使用ExtJS 4.0,并想在网格中显示嵌套的JSON数据。为此,我使用了Ext.data.reader.Reader文档中提供的示例:“加载嵌套数据”。这个示例很好很简单,但我现在想将这些数据显示在网格中。如何设置dataIndex

这是我的样例模型和存储:

Ext.define("data", {
    extend: 'Ext.data.Model',
    fields: ['year', 'state'],
    hasMany: {
        model: 'record',
        name: 'record'
    },
    proxy: {
        type: 'rest',
        url: 'Column.json.php',
        reader: {
            type: 'json',
            root: 'data'
        }
    }
});

Ext.define("record", {
    extend: 'Ext.data.Model',
    fields: ['id', 'autorization', 'expendture'],
    belongsTo: 'User'
});
var store1 = new Ext.data.Store({
    model: "data"
});

我的JSON是:

{
    "data": [{
        "year": "2010",
        "state": "MP",
        "record": [{
            "id": "auth",
            "autorization": "9.201"
        }, {
            "id": "exp",
            "expendture": "1.250"
        }]
    }]
}
我想使用 id 读取 authorizationexpenditure
2个回答

13

你需要在Model / Record级别上使用字段中的mapping配置来完成它,因此你可以像这样做:

Ext.define("record", {
    extend: 'Ext.data.Model',
    fields: [
        'id',
        {name: 'autorization', mapping: 'record[0].autorization'},
        {name: 'expendture', mapping: 'record[1].expendture'}
    ],
    belongsTo: 'User'
});

需要注意的是,在Sencha论坛上提问可能会更快得到答复。


11
"在Sencha论坛上提问可能更快一些,具有讽刺意味的是,我通过Sencha论坛上的链接找到了这个问题。" - James McMahon
你能在这个回答中提供更多信息吗?当你使用这里列出的映射列表时,你如何定义网格? - James McMahon

1
我想指出Store.loadData不尊重字段映射的问题。问题在于Sencha团队改变了loadData的行为,而且这并没有以清晰的方式记录下来。因此,如果您正在使用它,请将以下代码添加到您的代码库中(放在您的应用程序代码之上,但在ext-all.js之下):
Ext.override(Ext.data.Store, {
loadDataViaReader : function(data, append) {
var me      = this,
    result  = me.proxy.reader.read(data),
    records = result.records;

me.loadRecords(records, { addRecords: append });
me.fireEvent('load', me, result.records, true);
}            
 });

然后使用:

mystore.loadDataViaReader(data)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接