我有这样的商店:
Ext.define('app.store.System', {
extend : 'Ext.data.Store',
model : 'app.model.System',
autoLoad: true,
autoSync: true,
proxy: {
type: 'rest',
format: 'json',
url: '/application/appinfo',
method : "GET",
reader: {
type: 'json',
root: 'System'
},
writer: {
root: 'System',
allowSingle: false
}
}
});
我有一个服务端点来处理与此方法匹配/应用的请求:
@GET
@Path("/{sysinfo}")
public List<SystemInfo> getSystemInfo() {
if(sysinfo == null){
sysinfo = new SystemInfo();
...initialize
}
List<SystemInfo> resultList = new ArrayList<SystemInfo>();
resultList.add(sysinfo);
return resultList;
}
它似乎工作......当我试图访问localhost时:port / application / sysinfo.json我得到了这个:
{ [{"address":"...","feeds":["feed1","feed2"] } ] }
这似乎是正确的,但是当我尝试在视图的init方法中读取商店中的数据时:
var store = Ext.StoreManager.lookup('System');
var data = [];
store.each(function(record) {
data.push(record.getData());
console.log("record data: ");
console.log(record.getData());
});
console.log(data[0]);
它说它未定义,好像商店是空的。我尝试使用调试器,我发现getSystemInfo()在视图的initcomponent之后被称为但不幸的是我不知道为什么会这样或如何解决它。有什么想法吗?
感谢您的时间。
答案 0 :(得分:1)
您是否先尝试加载商店?
var store = Ext.StoreManager.lookup('System');
var data = [];
store.load({
callback: function(storeVar, records, successful) {
Ext.each(records, function(record) {
data.push(record.getData());
console.log("record data: ");
console.log(record.getData());
});
}
console.log(data[0]);
});
而boris说的是真的,你需要在返回的JSON中定义你的root属性。
如果你正在使用chrome或firefox,你还可以检查进行了哪个网络调用,以及它返回的内容(JSON数据......)。
答案 1 :(得分:1)
试试这个:
return new { success: true, System = resultList};