我是 Ext 的新手,我正在努力找出模型商店和代理。
服务器返回一个大型 JSON 对象。例如。
{
"responseHeader":{
"status":0,
"QTime":12,
"params":{
"facet":"true",
"facet.limit":"40"
}
},
"response":{
"numFound":3806,
"start":0,
"docs":[
{
//Lots of fields
"id":"1234",
...
//Some array properties
"testfield":[
"",
""
],
...
}
]
},
"facet_counts":{
"facet_queries":{
"email":3806
},
"facet_fields":{
"emailaddress":{
},
"subject":{
"candles":136,
"filter":130
},
"fromemail":{
},
//...
},
"facet_dates":{ },
"facet_ranges":{}
},
"highlighting":{
"some doc id":{
"emailtext":[ " Tel.: blah blah <em>blah</em>" ],
"combined":[ "<em>Email</em> To: blah blah blah" ]
}
}
}
我不想多次加载这些数据,我想从这个对象中获取数据,例如 docs 对象,并将其放入网格中。然后拉出另一部分放入选择框。
我如何加载这些数据一次,然后从中创建模型和存储以提供给网格和选择框?
从我读到的代理持有服务器响应?所以我尝试在商店外创建一个代理。认为我可以将同一个代理与多个商店一起使用。
var myProxy1 = Ext.create('Ext.data.proxy.Proxy', {
type: 'ajax',
url : '../test',
reader: {
type: 'json',
root: 'responseHeader'
}
});
但是当我将 myProxy1 传递给商店时
Ext.define('Test', {
extend: 'Ext.data.Model',
fields: [
{name: 'status', type: 'int'},
{name: 'QTime', type: 'int'},
{name: 'param', type: 'auto'}
]
});
var myStore = Ext.create('Ext.data.Store', {
model: 'Test',
proxy: myProxy1,
autoLoad: true,
listeners:{
load: function( ths, records, successful, operation, eOpts ){
debugger;
}
}
});
它不起作用。load 事件永远不会被触发。没有加载数据。我可以看到代理发出了请求,我看到了来自服务器的响应,但它没有加载。
如果我将代理内联,它会加载。
var myStore = Ext.create('Ext.data.Store', {
model: 'Test',
proxy:{
type: 'ajax',
url : '../test',
reader: {
type: 'json',
root: 'responseHeader'
}
},
autoLoad: true,
listeners:{
load:function( ths, records, successful, operation, eOpts ){
debugger;
}
}
});
我在想我可以有一个代理,将它附加到多个商店,然后在加载商店之前更改它的阅读器。