Проблема перенастройки сетки с плагином rowexpander extjs 4.21

У меня возникла проблема, когда я перенастроил свою сетку, в которой есть плагин 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**
    }
},

Пожалуйста помоги ! Заранее спасибо !!


person Sebastian Louis    schedule 01.08.2013    source источник


Ответы (3)


Может поздновато, но все же..

Можете ли вы подтвердить, что это происходит только в IE? Mozilla и Chrome, кажется, в порядке с этим.

Очевидно, IE не нравится colspan=0, и в какой-то момент код пытается присвоить 0 свойству colSpan элемента, и возникает ошибка.

Я попытался изменить его на items[i].colSpan = colspan || 1;, и проблема была решена, но, конечно, это не решение. Я пытаюсь проверить, действительно ли это ошибка или просто недостаток знаний! :)

РЕДАКТИРОВАТЬ:
Хотя я не смог найти никакого решения, чтобы заставить его работать, я просто переопределил метод, используя Ext.override, и оставил его таким.

EDIT2:
Как предложил ojintoad, вы также можете использовать что-то вроде .setAttribute('colSpan', 1);, чтобы изменить значение colspan с 0 на 1.

person Filipe Pereira    schedule 12.02.2014
comment
Я не знаю, лучшее ли это решение, но setAttribute('colSpan', colspan); работал на меня. Я испытал это только в IE10, поэтому применил это только к этой версии браузера в моем переопределении. Спасибо, что подтвердили, что это существует, я не вижу никаких записей на форумах Ext. - person ojintoad; 21.05.2014
comment
Я тоже не видел никаких ссылок на это, поэтому просто должен был копаться в этом сам. Да, это было бы лучшим решением! - person Filipe Pereira; 21.05.2014

Используйте приведенное ниже переопределение

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

}
person Sebastian Louis    schedule 03.09.2014

person    schedule
comment
Попробуйте дать небольшое объяснение тоже. - person Rohit Vipin Mathews; 16.08.2013