我有一个嵌套的JSON响应,如下所示(简化,但格式相同):
{
"response":{
"v":"1.0",
"users":[
{
"firstName":"Nicole",
"LastName":"A",
},
{
"firstName":"John",
"LastName":"B",
},
{
"firstName":"Bob",
"LastName":"C",
}
],
}
}
以下是模型:
Ext.define('MyApp.model.User', {
extend: 'Ext.data.Model',
requires: [
'Ext.data.Field'
],
config: {
fields: [
{
name: 'firstName'
},
{
name: 'lastName'
}
]
}
});
我从CityBars的sencha架构师教程开始,所以大部分代码应该是非常基础的,我只是试图让用户从json响应中加载。这是控制器:
Ext.define('MyApp.controller.User', {
extend: 'Ext.app.Controller',
launch: function() {
var me = this;
Ext.Viewport.setMasked({ message: 'Loading Attendees...' });
me.getUsers(function (store) {
me.getDataList().setStore(store);
});
},
getUsers: function(callback) {
var store = Ext.data.StoreManager.lookup('UserStore'),
url = 'http://urltogetjsonresponse'
store.getProxy().setUrl(url);
store.load(function() {
callback(store);
});
},
});
这是商店:
Ext.define('MyApp.store.UserStore', {
extend: 'Ext.data.Store',
requires: [
'MyApp.model.User',
'Ext.data.proxy.JsonP',
'Ext.data.reader.Json'
],
config: {
model: 'MyApp.model.User',
storeId: 'UserStore',
proxy: {
type: 'jsonp',
reader: {
type: 'json',
rootProperty: 'response.user'
}
}
}
});
我试过了响应。用户'但它对我不起作用。我已经全神贯注地知道使用rootProperty:' user'如果用户属性与"响应"处于同一级别,则可以正常工作而不是嵌套在它下面。我也尝试过添加记录:'用户'但这似乎也没有用。
如果有人知道这是否可行并且有一个简单的解决方案,这将是伟大的。我实际上并不了解代理是如何工作的,所以如果有人能够解释一下这个问题,它也会有所帮助。感谢。
答案 0 :(得分:0)
取自Sencha关于JSON阅读器的文档:
{
"count": 1,
"ok": true,
"msg": "Users found",
"users": [{
"userId": 123,
"name": "Ed Spencer",
"email": "ed@sencha.com"
}],
"metaData": {
"idProperty": 'userId',
"rootProperty": "users",
"totalProperty": 'count',
"successProperty": 'ok',
"messageProperty": 'msg'
}
}
这里的rootProperty
是用户',因此您需要指定users
(这是包含您的模型实例的数组的名称),而不是user
。