使用rowexpander插件extjs 4.21进行网格重新配置问题

时间:2013-08-01 09:04:46

标签: extjs4.2

当我重新配置其中包含rowexpander插件的网格时,我遇到了一个问题。如果我删除插件它工作正常。我也尝试了以下修复,但没有运气

Ext.override(Ext.grid.plugin.RowExpander, {
     beforeReconfigure: function (grid, store, columns, oldStore, oldColumns) {              
                var expander = this.getHeaderConfig();
                expander.locked = true;
                if (columns)
                    columns.unshift(expander);
            }
        });

这是错误

第9988行的未处理异常,脚本块

中的第13列

0x80070057 - Microsoft JScript运行时错误:参数无效。

它是从extjs脚本块的下面位置抛出的

onColumnsChanged: function(headerCt) {
    var items = this.view.el.query(this.rowBodyTdSelector),
        colspan = headerCt.getVisibleGridColumns().length,
        len = items.length,
        i;

    for (i = 0; i < len; ++i) {
        items[i].colSpan = colspan; // **the error thown location is this**
    }
},

请帮忙!在此先感谢!!

3 个答案:

答案 0 :(得分:3)

grid.suspendEvents();
grid.reconfigure (store);
grid.resumeEvents();

答案 1 :(得分:3)

可能有点太晚了,但无论如何......

你能确认它只发生在IE吗? Mozilla和Chrome似乎没问题。

显然IE不喜欢colspan=0,并且在某些时候代码会尝试将0分配给项目的colSpan属性并抛出错误。

我已经尝试将其更改为items[i].colSpan = colspan || 1;并且问题已解决,但当然这不是解决方案。我正试图检查这是一个真正的错误还是只是缺乏知识! :)

编辑:
虽然我找不到任何解决方案,但为了使其工作,我只是使用Ext.override覆盖了该方法并将其保留。

EDIT2:
根据ojintoad的建议,您还可以使用.setAttribute('colSpan', 1);之类的内容将colspan值从0更改为1.

答案 2 :(得分:0)

使用以下覆盖

 overrideRowBodyOnColumnChanged: function () {
        for (var i = 0 ; i < this.features.length; i++) {
            if (this.features[i].ftype == 'rowbody') {
                Ext.override(this.features[i], {
                    onColumnsChanged: function (headerCt) {
                        var items = this.view.el.query(this.rowBodyTdSelector),
                            colspan = headerCt.getVisibleGridColumns().length,
                            len = items.length,
                            i;
                        colspan = colspan == 0 ? 1 : colspan;
                        for (i = 0; i < len; ++i) {
                            items[i].colSpan = colspan;
                        }
                    }
                });
                break;
            }
        }
    },

并在网格的initComponent函数中调用此覆盖函数

initComponent: function () {

// your code

  this.overrideRowBodyOnColumnChanged();

}