Ext JS dataIndex

#extjs

#extjs

Вопрос:

Я создал сетку, используя библиотеку extjs.

Сначала создана модель:

 Ext.define('Option', {
    extend: 'Ext.data.Model',
    idProperty: 'OptionId',
    fields: [
        { name: 'TradeDate' },
        { name: 'OptionType' }
    ]
});
 

Во-вторых, я создал массив столбцов:

 var allColumns = [
    {
        text: 'Option Id',
        width: 75,
        sortable: true,
        cls: 'grid-header-LadderStep',
        dataIndex: 'ExternalId',
        renderer: RenderColumn
    },
    {
        text: 'Trade Date',
        width: 65,
        sortable: true,
        cls: 'grid-header-LadderStep',
        dataIndex: 'TradeDate',
        renderer: RenderColumn
    }
]
 

В списке столбцов renderer событие определяется ниже:

 function RenderColumn (value, metaData, record, rowIdx, colIdx, store, view) {
    metaData.style = 'background-color:#BBD5EE !important';
    return value;
};
 

Как я могу узнать из RenderColumn функции, dataindex которую я определил в списке столбцов?

Это может быть ExternalId или TradeDate в случае, который я описал.

Я нашел решение:

 grid.columns[colIdx].dataIndex
 

Где grid — это глобальная сеточная переменная.

Ответ №1:

Хорошо, итак, это еще не было задокументировано командой Sencha, но доступно. Вы должны сделать это с помощью метода, доступного в контейнере заголовка в сетке Ext.grid.View :

     renderer: function(val, meta, rec, rowIdx, colIdx, store, view) {
        var column = view.getHeaderAtIndex(colIdx);
        var dataIndex = column.dataIndex;
    }
 

Причина, по которой это работает, заключается в том, что Ext.grid.View наследует от Ext.table.View which имеет метод, getHeaderAtIndex , который должен быть общедоступным, но еще не был задокументирован.

Я обнаружил, что некоторые вещи еще не задокументированы с помощью этого

Комментарии:

1. подождите … это не сработает из-за того, что индекс потенциально не совпадает… Я пересмотрю

2. Как я могу определить имя поля?

3. Это в определении вашей модели. Если вы посмотрите на свой fields параметр конфигурации, вы увидите, что каждое поле было определено с помощью a name .

4. Да, я нахожусь в процессе выяснения, предоставляет ли Ext4 достаточно информации.

Ответ №2:

Вы можете указать ‘defaultRenderer’, а затем использовать этот.dataIndex. Вот так:

 {
    text: 'Trade Date',
    width: 65,
    sortable: true,
    cls: 'grid-header-LadderStep',
    dataIndex: 'TradeDate',
    defaultRenderer: RenderColumn
}
 

Теперь вы можете использовать этот.dataIndex в своих средствах визуализации.