Как отобразить вложенные данные Json в сетях EXTJS 4?
Я работаю над ExtJS 4.0, и я хочу отображать вложенные данные JSON в сетке. Для этого я использую пример, приведенный в Ext.data.reader.Reader
docs, "Загрузка вложенных данных" . Это хорошо и просто, но теперь я хочу отображать эти данные в сетке. Как установить dataIndex
?
Это моя модель образца и сохраните:
Ext.define("data", {
extend: 'Ext.data.Model',
fields: ['year', 'state'],
hasMany: {
model: 'record',
name: 'record'
},
proxy: {
type: 'rest',
url: 'Column.json.php',
reader: {
type: 'json',
root: 'data'
}
}
});
Ext.define("record", {
extend: 'Ext.data.Model',
fields: ['id', 'autorization', 'expendture'],
belongsTo: 'User'
});
var store1 = new Ext.data.Store({
model: "data"
});
И мой JSON:
{
"data": [{
"year": "2010",
"state": "MP",
"record": [{
"id": "auth",
"autorization": "9.201"
}, {
"id": "exp",
"expendture": "1.250"
}]
}]
}
Я хочу читать autorization
и expendture
с помощью id
Ответы
Ответ 1
Вы должны сделать это на уровне Model/Record, используя поля mapping
confg in, так что вы бы сделали что-то вроде этого:
Ext.define("record", {
extend: 'Ext.data.Model',
fields: [
'id',
{name: 'autorization', mapping: 'record[0].autorization'},
{name: 'expendture', mapping: 'record[1].expendture'}
],
belongsTo: 'User'
});
Хорошо отметить, что, скорее всего, быстрее задать вопросы на Sencha Forums.
Ответ 2
Я хочу указать, что Store.loadData не учитывает сопоставление полей
Проблема в том, что команда Sencha изменила поведение loadData, и это не то, что задокументировано таким образом, что это ясно. Поэтому, если вы используете его, добавьте следующее в свою базу кода (над кодом приложения, но ниже ext-all.js):
Ext.override(Ext.data.Store, {
loadDataViaReader : function(data, append) {
var me = this,
result = me.proxy.reader.read(data),
records = result.records;
me.loadRecords(records, { addRecords: append });
me.fireEvent('load', me, result.records, true);
}
});
затем используйте:
mystore.loadDataViaReader(data)