【问题标题】:grid reconfigure issue with rowexpander plugin extjs 4.21rowexpander 插件 extjs 4.21 的网格重新配置问题
【发布时间】:2013-08-01 09:04:45
【问题描述】:

我在重新配置包含 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**
    }
},

请帮忙!提前致谢!!

【问题讨论】:

    标签: extjs4.2


    【解决方案1】:
    grid.suspendEvents();
    grid.reconfigure (store);
    grid.resumeEvents();
    

    【讨论】:

    • 也尝试提供一点解释。
    【解决方案2】:

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

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

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

    我试过把它改成items[i].colSpan = colspan || 1;,问题就解决了,但这当然不是解决办法。我正在尝试检查这是一个真正的错误还是只是缺乏知识! :)

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

    编辑2:
    根据ojintoad 的建议,您也可以使用.setAttribute('colSpan', 1); 之类的东西,将 colspan 值从 0 更改为 1。

    【讨论】:

    • 不知道是不是更好的方案,但是 setAttribute('colSpan', colspan);为我工作。我只在 IE10 中体验过这个,所以只在我的覆盖中将它应用到那个浏览器版本。感谢您确认这存在,我在 Ext 的论坛上没有看到任何条目。
    • 我也没有看到对此的任何参考,所以只好自己深入研究它。是的,这将是一个更好的解决方案!
    【解决方案3】:

    使用下面的覆盖

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 2015-08-22
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多