嗨,大家好,我希望有人可以帮助我这个我真的被卡住了,虽然这是一个已经得到回答的一个该死的初学者问题,我向你保证我读了所有答案的帖子,但仍然无法得到它工作
我正在使用Sencha Touch 1.1.1并试图让这个商店加载嵌套的JSON数据。这是代码:
Ext.regModel("UserData", {
hasMany : [{
name : "id",
type : "integer",
},{
name : "username",
type : "string",
},{
name : "password",
type : "string",
}]
});
var userdata =
{"users": [
{
"id": 16,
"username": "bla@bla.com",
"password": "bla",
}, {
"id": 17,
"username": "bla@bla.com",
"password": "bla",
}
]
};
var myStore = new Ext.data.Store({
model : 'UserData',
data : userdata,
proxy : {
type : 'ajax',
reader : {
type : 'json',
root : 'users' // not working
}
}
});
var myList = new Ext.List ({
fullscreen : true,
store : myStore,
grouped : false,
itemTpl : '<div>{username}</div>'
});
返回未捕获的类型错误:参数列表的类型错误。当我使用外部数组包装器重写JSON时,它可以正常工作,但是如果错误的根(不是用户),我肯定会看到这样的示例:root:''value。
var userdata =
[ {"users": [
{
"id": 16,
"username": "bla@bla.com",
"password": "bla",
}, {
"id": 17,
"username": "bla@bla.com",
"password": "bla",
}
]
} ];
我错过了什么?
答案 0 :(得分:0)
如果我没记错,在“UserData”模型中,它应该是fields
而不是hasMany
。
尝试将json数据放在单独的json文件中,并在商店代理中找到路径。
var myStore = new Ext.data.Store({
model: 'UserData',
autoLoad: true,
proxy: {
type: 'ajax',
url: 'test.json',
reader: {
type: 'json',
root: 'users'
}
}
});
我测试了它,它在这里工作正常。这是我的完整代码。
Ext.regModel("UserData", {
fields: [
{name: 'id', type:'int'},
{name: 'username', type:'string'},
{name: 'password', type:'string'}
]
});
var myStore = new Ext.data.Store({
model: 'UserData',
autoLoad: true,
proxy: {
type: 'ajax',
url: 'test.json',
reader: {
type: 'json',
root: 'users'
}
}
});
var app = new Ext.Application({
name: 'TestApp',
useLoadMask: true,
launch: function() {
TestApp.views.listToolbar = new Ext.Toolbar({
title: 'Foo Bar',
layout: 'hbox'
});
TestApp.views.list = new Ext.List({
id: 'list',
store: myStore,
emptyText: 'Nothing',
itemTpl: '<div class="username">{username}</div>',
});
TestApp.views.container = new Ext.Panel({
layout: 'fit',
html: 'this is the container',
dockedItems: [TestApp.views.listToolbar],
items: [TestApp.views.list]
});
TestApp.views.viewport = new Ext.Panel({
fullscreen: true,
layout: 'card',
cardAnimation: 'slide',
items: [
TestApp.views.container
]
});
}
});