EXT JS 3 - this.focusEl - неопределенная ошибка при щелчке заголовка columnGrid - PullRequest
0 голосов
/ 28 июня 2011

Я использую ExtJs 3.2.2.Я написал пользовательское контекстное меню для обработки события headerclick сетки.Я получаю ошибку «this.focusEl is undefined error» при нажатии на заголовок.У меня есть ощущение, что это как-то связано с контекстом в контекстном меню, но я озадачен.FF изящно ухудшается и по-прежнему отображает меню, но поведение IE непредсказуемо.

Это событие заголовка сетки:

headerclick: function(grid, columnIndex, e) {
    e.stopEvent();
    var colModel = grid.getColumnModel();
    var col = colModel.getColumnById(colModel.getColumnId(columnIndex))
    contextMenu.columnId = col.id;
    contextMenu.headerName = col.header;
    contextMenu.showAt(e.getXY());
}

Это контекстное меню:

var contextMenu = new Ext.menu.Menu({
    items: [{
        id: 'sort-high-to-low',
        cls: 'xg-hmenu-sort-asc',
        text: 'Sort Ascending within Group'
    },{
        id: 'sort-low-to-high',
        cls: 'xg-hmenu-sort-desc',
        text: 'Sort Descending within Group'
    },'-',{
        id: 'sort-high-to-low-all',
        cls: 'xg-hmenu-sort-asc',
        text: 'Sort All Ascending'
    },{
        id: 'sort-low-to-high-all',
        cls: 'xg-hmenu-sort-desc',
        text: 'Sort All Descending'
    },'-',    {
        id: 'heatmap',
        cls: 'xg-hmenu-heatmap',
        text: 'Open in Heatmap'
    }],
    listeners: {
        scope: this, // not sure if this is correct...
        itemclick: function(item) {
            switch (item.id) {
                case 'sort-high-to-low':
                    Ext.getCmp('backtestGrid').getStore().sort(contextMenu.columnId,'ASC');
                    this.hide();
                    break;
                case 'sort-low-to-high':
                    Ext.getCmp('backtestGrid').getStore().sort(contextMenu.columnId,'DESC');
                    this.hide();
                    break;
                case 'sort-high-to-low-all':
                    Ext.getCmp('backtestGrid').getStore().clearGrouping();
                    Ext.getCmp('backtestGrid').getStore().sort(contextMenu.columnId,'ASC');
                    this.hide();
                    break;
                case 'sort-low-to-high-all':
                    Ext.getCmp('backtestGrid').getStore().clearGrouping();
                    Ext.getCmp('backtestGrid').getStore().sort(contextMenu.columnId,'DESC');
                    this.hide();
                    break;
                case 'heatmap':
                    heatmapCallback(contextMenu.headerName, contextMenu.columnId);
                    this.hide();
                    break;
            }
        }
    }
});

Второй вопрос, когда я нажимаю на один из пунктов контекстного меню.Я получаю следующую ошибку:

this.fireEvent is not a function

Первый элемент, например, является сортировкой.При нажатии на первый элемент FF выдаст ошибку, но все равно отсортирует сетку.IE не сортирует сетку.

Опять же, я чувствую, что эта ошибка связана с операторами

this.hide();

в каждом из блоков case.Я полагаю, это относится к пункту меню, а не к меню.После нажатия на каждый пункт мне нужно скрыть меню.Однако, даже если я закомментирую операторы this.hide (), ошибка все равно возникает.

1 Ответ

1 голос
/ 01 июля 2011

Я включил в код старую версию prototype.js, которая конфликтовала с версией prototype.js, которая поставляется вместе с Ext JS.

Я продолжал видеть ссылки на функции в prototype.js в журналах ошибок Firebug. Я просматривал код с помощью зубчатой ​​расчески, пока не нашел ссылку. Я удалил его и без ошибок!

Ссылка на решение на Сенче:

http://www.sencha.com/forum/showthread.php?138644-this.focusEl-is-undefined-error-on-click-of-columnGrid-header&p=619749

...