我正在尝试将特定的json文件加载到listview中;但是,sencha代理似乎并不理解“CurrencyName”和“Value”的密钥对。我对如何将这两个值与可用数据相关联一无所知。
这是json:
{
"timestamp": 1335294053,
"base": "USD",
"rates": {
"AED": 3.6732,
"AFN": 48.32,
"ALL": 106.040001
}
}
我的商店:
proxy: {
type: 'ajax',
url: 'http://localhost/CurrencyFX/latest.json',
reader: {
type: 'json',
rootProperty: 'rates'
}
},
我的模特:
Ext.define('CurrencyFX.model.Currency', {
extend: 'Ext.data.Model',
config: {
fields: [ 'name', 'value' ]
}
});
答案 0 :(得分:4)
您需要编写自己的JSON读取器子类才能使其正常工作,因为您处理的数据不是数组。
谢天谢地,这样做很简单。这是应该做的事情:
Ext.define('Ext.data.reader.Custom', {
extend: 'Ext.data.reader.Json',
alias : 'reader.custom',
getRoot: function(data) {
if (this.rootAccessor) {
data = this.rootAccessor.call(this, data);
}
var values = [],
name;
for (name in data) {
values.push({
name: name,
value: data[name]
});
}
return values;
}
});
适用于以下商店配置:
var store = Ext.create('Ext.data.Store', {
fields: ['name', 'value'],
autoLoad: true,
proxy: {
type: 'ajax',
url: '0000.json',
reader: {
type: 'custom',
rootProperty: 'rates'
}
}
});
请注意,读者type
现在是自定义。
我在本地使用您的数据进行了测试,看起来效果很好。