Подтвердить что ты не робот

Как отобразить вложенные данные 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

4b9b3361

Ответ 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)