我的问题是除了totalRecords之外如何获取元数据,在我的例子中它是版本,代码,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);
}
}
});
使用此商店我可以加载记录(帐户),但无法找到任何方法来访问其余字段。
提前谢谢。
答案 0 :(得分:17)
这是我的问题的解决方案。我在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);
}
}
答案 1 :(得分:3)
可以使用商店的'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);
}
}
});
答案 2 :(得分:1)
查看Ext.data.Proxy
类,更具体地说processResponse()
方法。如果您需要提取任何其他数据 - 您必须扩展标准类并更改该方法。