我有这个JSON商店,但它没有正确编码。它的正确语法是什么?
Ext.define('MA.store.Language', {
extend : 'Ext.data.Store',
fields : [ {
name : 'id'
}, {
name : 'name'
} ],
data : [ {
"aa" : "Afar",
"ab" : "Abkhazian",
"ace" : "Achinese",
"ach" : "Acoli",
"ada" : "Adangme",
"ady" : "Adyghe",
"ae" : "Avestan",
"af" : "Afrikaans",
"afa" : "Afro-Asiatic Language",
"afh" : "Afrihili",
"ain" : "Ainu",
"ak" : "Akan"
} ]
});
我需要这个商店用于这样的组合框,但它无法工作:
{
xtype : 'combo',
name : 'language',
fieldLabel : 'Language',
store : 'Language',
queryMode : 'local',
displayField : 'name',
valueField : 'id',
typeAhead : true,
forceSelection : true
}
答案 0 :(得分:4)
首先,在您的组合框配置中,您必须:存储:Ext.create('MA.store.Language'),而不是:存储: '语言' 日
其次,您的商店定义必须如下所示:
Ext.define('MA.store.Language', {
extend : 'Ext.data.Store',
fields : [ {
name : 'id'
}, {
name : 'name'
} ],
data : [ {
"aa" : "Afar",
"ab" : "Abkhazian",
"ace" : "Achinese",
"ach" : "Acoli",
"ada" : "Adangme",
"ady" : "Adyghe",
"ae" : "Avestan",
"af" : "Afrikaans",
"afa" : "Afro-Asiatic Language",
"afh" : "Afrihili",
"ain" : "Ainu",
"ak" : "Akan"
} ],
read : function() {
var me = this;
var oldData = me.getProxy().data[0];
var data = [];
for (var prop in oldData) {
if (oldData.hasOwnProperty(prop)) {
data.push({
id: prop,
name: oldData[prop]
});
}
}
me.loadData(data);
}
});
它可以像你期望的那样使用你的组合框。
编辑:而不是这个:
data.push({
id: prop,
name: oldData[prop]
});
我有这个:
data.push({
id: prop,
value: oldData[prop]
});
答案 1 :(得分:4)
所以你想要使用你不寻常的JSON。在这种情况下,您可以通过定义自己的阅读器来解决您的问题。像这样:
Ext.define('MA.reader.Language', {
extend: 'Ext.data.reader.Json',
alias: 'reader.Language',
read: function (response) {
var data = [];
for (var i in response[0])
data.push({
id: i,
'name': response[0][i]
});
return this.callParent([data]);
}
});
Ext.define('MA.store.Language', {
extend: 'Ext.data.Store',
fields: [{
name: 'id'
}, {
name: 'name'
}],
data: [{
"aa": "Afar",
"ab": "Abkhazian",
"ace": "Achinese",
"ach": "Acoli",
"ada": "Adangme",
"ady": "Adyghe",
"ae": "Avestan",
"af": "Afrikaans",
"afa": "Afro-Asiatic Language",
"afh": "Afrihili",
"ain": "Ainu",
"ak": "Akan"
}],
proxy: {
type: 'memory',
reader: {
type: 'Language'
}
}
});
var store = Ext.create('MA.store.Language', {
storeId: 'Language'
});
var cc = Ext.widget('combo', {
xtype: 'combo',
name: 'language',
fieldLabel: 'Language',
store: 'Language',
queryMode: 'local',
displayField: 'name',
valueField: 'id',
typeAhead: true,
forceSelection: true
});
cc.render(Ext.getBody());
答案 2 :(得分:2)
对于您的示例,您必须将数据修改为:
data : [
{ id: "aa", 'name' : "Afar" },
{ id: "ab", 'name' : "Abkhazian" },
...
]