如何为ExtJS商店创建多个root用户JSON?

时间:2012-02-17 00:00:03

标签: json extjs grid store

我想在服务器端使用2根创建一个JSON字符串。我正在使用ExtJS 3.2。我想使用第一个根来加载数据到网格,第二个是用不同的数据填充表单。 我在服务器端创建JSON字符串,就像这样;

{
    metaData: {
        "idProperty": "reportID", 
        "root": "data", 
        "successProperty": "success"
    }, 
    "success": true, 
    "data": [
    {
        "ID": 1, 
        "name": "Jon", 
        "surname": "Doe"
    }]
}

假设第二个 root 名称为摘要,第二个 idProperty summaryID 。如何实现此功能以及在何处可以添加摘要数据? 总而言之。

1 个答案:

答案 0 :(得分:4)

你愿意这样做没有自动化。我在this project上遇到了同样的问题,我想出了如何从JSON响应中自动创建多个存储。在加载网格之前输出以下代码。在extjs4中,我将以下代码放在app.js中,以便在初始化应用程序时创建存储。将根据JSON返回的内容自动创建存储:

    Ext.Ajax
                    .request({
                        url : './account/getadminstores',
                        callback : function(options, success, response) {
                            var json = Ext.decode(response.responseText);
                            var adminStores = new Array();
                            // setup and intitialize on the fly stores
                            for ( var key1 in json) {
                                var storeFields = new Array();
                                for ( var key2 in json[key1]) {// if
                                    // (i==1){break;}
                                    // console.log(key2);
                                    for ( var key3 in json[key1][key2]) {
                                        storeFields.push(key3);
                                    }
                                    break;
                                }
                                ;
                                Ext.define('MA.store.' + key1, {
                                    extend : 'Ext.data.Store',
                                    fields : storeFields,
                                    storeId : key1,
                                    id : 'MA.store.' + key1,
                                    data : json[key1],
                                proxy: {
                                    type: 'ajax',
                                    url : './account/getadminstores',
                                    reader: {
                                        type: 'json',
                                        root: key1
                                    }
                                },
                                autoLoad: true
                                });
                                Ext.create('MA.store.' + key1);
                            }
                            ;

为您的案例创建的商店将是MA.store.root1MA.store.root2,其中MA是您的应用程序命名空间(您应该将其更改为您的应用程序命名空间)。此代码适用于extjs4,您可能需要一些修改,使其在旧版本中工作。希望它有所帮助。