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**
    }
},

请帮忙 !提前致谢 !!

4

3 回答 3

3
grid.suspendEvents();
grid.reconfigure (store);
grid.resumeEvents();
于 2013-08-16T11:37:54.733 回答
3

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

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

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

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

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

EDIT2:
正如提议的那样ojintoad,您还可以使用类似.setAttribute('colSpan', 1);, 将 colspan 值从 0 更改为 1。

于 2014-02-12T15:03:50.413 回答
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();

}
于 2014-09-03T05:20:44.497 回答