Extjs:网格因 Ext.grid.column.Widget 而崩溃

Extjs: grid crashes because of the Ext.grid.column.Widget

大家好!

我在 beforerender 组件的 Ext.grid.Panel 事件中创建了一个 Ext.grid.column.Widget:

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);

在这个舞台上一切都很好,显示了带有按钮的列并且表现良好,但是......

还有一些附加功能 - window 通过单击其他单元格(网格列)打开,它使用 ViewControlleronCellclick 它调用:

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

然后崩溃:

tracing显示崩溃发生在这里(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 属性:

但是在小部件列上,属性变量似乎等于 null。

我注意到 grid.columns 数组只包含网格列而不包含小部件列。

我需要做什么来解决这个错误?

这是一个带有动态网格构造函数的大型项目,因此我无法在 fiddle 中生成它。

您是否尝试过使用 reconfigure 方法而不是使用像 headerCt 这样的私有属性(在我看来这是个坏主意)?

像这样使用它: grid.reconfigure(columns);

需要在beforerender活动中吗?我建议重写 initComponent 函数。

通过向 Ext.grid.column.Widget 对象添加必要的参数解决了问题:

dataIndex: 'WidgetColumn',