0

ExtJs 3.2.2 を使用しています。グリッドの headerclick イベントを処理するカスタム コンテキスト メニューを作成しました。ヘッダーをクリックすると、「this.focusEl is undefined error」というエラーが表示されます。コンテキストメニューのスコープと関係があるような気がしますが、当惑しています。FF は正常に機能を低下させ、引き続きメニューを表示しますが、IE の動作は予測できません。

これは、グリッドの headerclick イベントです。

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

2 番目の質問は、コンテキスト メニュー項目の 1 つを実際にクリックしたときです。次のエラーが表示されます。

this.fireEvent is not a function

たとえば、最初の項目はソートです。最初の項目をクリックすると、FF はエラーをスローしますが、それでもグリッドを並べ替えます。IE はグリッドをソートしません。

繰り返しますが、このエラーは

this.hide();

各 case ブロックのステートメント。これはメニューではなく、メニュー項目を指していると思います。各項目をクリックした後、メニューを非表示にする必要があります。ただし、 this. hide() ステートメントをコメントアウトしても、エラーは引き続き発生します。

4

1 に答える 1

1

Ext JSにパッケージ化されているprototype.jsのバージョンと競合していた、古いバージョンのprototype.jsをコードに含めました。

Firebugのエラーログにprototype.js内の関数への参照が表示され続けました。参照が見つかるまで、歯の細かい櫛でコードを調べました。私はそれを削除しましたが、エラーはありません!

Senchaのソリューションへのリンク:

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

于 2011-06-30T20:37:08.630 に答える