Extjs: сбой сетки из-за Ext.grid.column.Widget - PullRequest
2 голосов
/ 19 сентября 2019

Всем доброго времени суток!

Я создал Ext.grid.column.Widget в beforerender событие Ext.grid.Panel компонента:

var column = Ext.create('Ext.grid.column.Widget', {
                text  : '...',
                width : 200,
                onWidgetAttach: function(column, widget, record) {
                     // simple operations
                },
                widget: {
                    xtype   : 'button',
                    text    : '...',
                    listeners: {
                        click: function(me, event, eOpts) {
                            // simple operations
                        }
                    }
                }
            });

Затем я присоединяю это к основному компоненту Ext.grid.Panel:

grid.headerCt.insert(2, column);

На этом этапе все хорошо, столбец с кнопками показывается и работает хорошо, но...

Существует некоторая дополнительная функциональность - окно открывается при нажатии на другую ячейку (gridcolumn), оно использует ViewController и на onCellclick оно вызывает:

record.callJoined('afterCommit', [fieldName]);

А затем сбой: Chrome crash pic

Трассировка показывает, что здесь происходит сбой (ext-all-rtl-debug.js):

updateColumns: function(oldRow, newRow, columnsToUpdate, record) {
...
// Replace changed cells in the existing row structure with the new version
// from the rendered row.
for (colIndex = 0; colIndex < colCount; colIndex++) {
    column = columnsToUpdate[colIndex];
    // Pluck out cells using the column's unique cell selector.
    // Because in a wrapped row, there may be several TD elements.
    cellSelector = me.getCellSelector(column);
    oldCell = oldRow.querySelector(cellSelector);
    newCell = newRow.querySelector(cellSelector);
    // Copy new cell attributes across.
    newAttrs = newCell.attributes; // HERE IS THE CLUE????
    attLen = newAttrs.length;
    for (attrIndex = 0; attrIndex < attLen; attrIndex++) {
        attName = newAttrs[attrIndex].name;
        value = newAttrs[attrIndex].value;
        if (attName !== 'id' && oldCell.getAttribute(attName) !== value) {
            oldCell.setAttribute(attName, value);
        }
    }

console.log(newCell.attributes) показывает такие атрибуты gridcolumn: console.log

Но в столбце виджета кажется, что атрибуты переменная равна нулю.

Я заметил, что gridМассив .columns содержит только gridcolumns и не содержит widgetcolumn.

Что мне нужно сделать, чтобы устранить ошибку?

Это огромныйпроект с динамическим конструктором сетки, поэтому я не могу создать его в скрипке.

Ответы [ 2 ]

2 голосов
/ 27 сентября 2019

Проблема решается добавлением необходимого параметра в объект Ext.grid.column.Widget:

dataIndex: 'WidgetColumn',
0 голосов
/ 26 сентября 2019

Вы пытались использовать метод reconfigure вместо использования личных атрибутов, таких как headerCt (на мой взгляд, это плохая идея)?

Используйте это как: grid.reconfigure(columns);

Это должно быть в beforerender событии?Я предлагаю переопределить функцию initComponent.

...