如何配置ExtJS的4商店(代理和阅读器)来读取元(How to configure ExtJS 4

2019-07-29 21:24发布

我的问题是如何获得的元数据,除了总记录,在我的情况下,它是版本,代码,SEARCHQUERY(请看JSON)。

{
"result": {
    "version":"1",
    "code":"200",
    "searchquery": "false",
    "totalRecords": "2",
    "account":[
            {
                "lastname": "Ivanoff", 
                "firstname": "Ivan", 
                "accountId":"1"
            },
            {
                "lastname": "Smirnoff", 
                "firstname": "Ivan", 
                "accountId":"2"
            }
        ]
}

}

这里是我的模型:

Ext.define("test.Account", {
    extend: "Ext.data.Model",
    fields: [
        {name: 'accountId', type: 'string'},
        {name: 'lastname', type: 'string'},
        {name: 'firstname', type: 'string'}    
    ]
});

和存储:

Ext.define("test.TestStore", {
    extend: "Ext.data.Store",
    model: "test.Account",
    proxy: {
        type: "ajax",
        url: "users.json",  
        reader: {
            type    : 'json',
            root    : 'result.account',
            totalProperty: "result.totalRecords"
        }
    },

    listeners: {
        load: function(store, records, success) {
            console.log("Load: success " + success);     
        }
    }
});

使用这个店,我能够加载记录(帐户),并不能找到任何方法来访问领域的其余部分。

先感谢您。

Answer 1:

这里是我的问题的解决方案。 我在处理Proxy类在那里我能得到响应数据,分析它,并保存元数据afterRequest事件。 这是TestStore类的代理部分:

因此,这里是代理部分来自TestStore类:

proxy: {
        type: "ajax",
        url: "/users.json",  
        reader: {
            type    : 'json',
            root    : 'gip.account',
            totalProperty: "gip.totalRecords",
            searchquery: "searchquery"
        },
        afterRequest: function(req, res) {
            console.log("Ahoy!", req.operation.response);    
        }
    }


Answer 2:

它可以使用店内的“metachange”事件。

所有的非特异性的ExtJS信息可以在JSON在单独的对象被分组:

{
    "result": {
        "totalRecords": "2",
        "account":[
            {
                "lastname": "Ivanoff", 
                "firstname": "Ivan", 
                "accountId":"1"
            },
            {
                "lastname": "Smirnoff", 
                "firstname": "Ivan", 
                "accountId":"2"
            }
        ]
    },
    "myMetaData": {
        "version":"1",
        "code":"200",
        "searchquery": "false"
    }
}

店里被配置为

Ext.define("test.TestStore", {
    extend: "Ext.data.Store",
    model: "test.Account",
    proxy: {
        type: "ajax",
        url: "users.json",  
        reader: {
            type    : 'json',
            root    : 'result.account',
            totalProperty: "result.totalRecords",
            metaProperty: 'myMetaData'
        }
    },

    listeners: {
        metachange: function(store, meta) {
            console.log("Version " + meta.version + "Search query " + meta.searchQuery);     
        }
    }
});


Answer 3:

看看Ext.data.Proxy类更具体processResponse()方法。 如果你需要提取任何额外的数据 - 你将不得不发放标准类和更改方法。



文章来源: How to configure ExtJS 4 Store (proxy and reader) to read metadata