我有多个商店需要使用不同rootProperty的相同JSON文件。是否有可能加载json文件一次并用它填充所有商店?截至目前,具有三个不同rootProperties的三个商店导致三次调用服务器,以获取包含数据的可能兆字节大小的JSON文件,并为每个请求反复生成。
json看起来像:
{"users":[{"id":0,"name":"John Doe",...},...],
"threads":[{"id":0,"startedBy":0,"lastPost":0,...},...],
"posts":[...]}
三家商店非常相似,一个例子:
store: {
model: 'Forum.model.Post',
autoLoad: true,
proxy:{
type: 'ajax'
url: '../api/json.php'
reader: {
type:'json'
rootProperty:'posts'
}
}
}
答案 0 :(得分:7)
您可以使用内存代理配置商店:
store: {
model: 'Forum.model.Post',
proxy:{
type: 'memory'
reader: {
type: 'json'
root: 'posts'
}
}
}
然后使用Ext.Ajax.request获取数据并使用代理将其加载到每个商店中:
Ext.Ajax.request({
url: '../api/json.php',
success: function(response) {
var result = Ext.JSON.decode(response.responseText);
store.getProxy().data = result;
store.load();
// same procedure for the other stores...
}
});
答案 1 :(得分:2)
(基本上是Evan所说的)在你的商店设置“autoLoad:false”。在控制器中,执行手动Ext.Ajax.request以获取大型JSON对象。对于每个商店,手动调用store.loadRawData()并将该JSON对象作为第一个参数传递。
这种方法比仅使用内存代理有一个优势:一旦你加载了数据,你的每个商店都会继续通过代理与服务器进行通信。