Extjs 3 rowcontext уничтожить

Я создал две панели вкладок, и каждая панель имеет сетку.

Слушатель для сетки A:

Ext.getCmp('AGrid').addListener("rowcontextmenu", function menus(grid, rowIndex, e) {
        if (!grid.contextMenu) {
            grid.contextMenu = new Ext.menu.Menu({
                autoDestroy: false,
                items: [{ id: 'view', text: 'View Content'}],
                currentRowIndex: rowIndex,
                listeners: {
                    itemclick: function (item) {
                        switch (item.id) {
                            case 'view':
                                viewEmailClick(grid.getStore().getAt(this.currentRowIndex).data);
                                break;
                        }
                    }
                }
            });
        }
        this.contextMenu.currentRowIndex = rowIndex;
        e.stopEvent();  // this stops the browser context menu and allows the default grid 
        // show the row context menu here
        this.contextMenu.showAt(e.xy);
    });

Слушатель для сетки B:

Ext.getCmp('BGrid').addListener("rowcontextmenu", function menus(grid, rowIndex, e) {    
        if (!grid.contextMenu) {
            grid.contextMenu = new Ext.menu.Menu({
                autoDestroy: false,
                items: [{ id: 'view', text: 'View Task'}],
                currentRowIndex: rowIndex,
                listeners: {
                    itemclick: function (item) {
                        switch (item.id) {
                            case 'view':
                                viewTicketClick(grid.getStore().getAt(this.currentRowIndex).data);
                                break;
                        }
                    }
                }
            });
        }
        this.contextMenu.currentRowIndex = rowIndex;
        e.stopEvent();  // this stops the browser context menu and allows the default grid 
        // show the row context menu here
        this.contextMenu.showAt(e.xy);
    });

Когда я щелкаю правой кнопкой мыши по нему, сетка A работает нормально, а затем щелкает правой кнопкой мыши по строке Grid B, контекстное меню не работает (просто показывает маленькую серую точку).

После того, как я вернусь к сетке A и щелкну правой кнопкой мыши, в сетке A появятся два контекстных меню строки:

скриншот

Если я щелкну правой кнопкой мыши по сетке B и щелкну правой кнопкой мыши по сетке A (ничего не отображается) после возврата к сетке B, появится контекстное меню строки, которое содержит два списка (обратный порядок) в сетке B.

Почему такое происходит?
Как правильно отобразить контекстное меню каждой строки сетки?


person Stonpid    schedule 30.01.2012    source источник


Ответы (2)


Кажется, вы передаете одну и ту же переменную grid обоим слушателям.

person Thevs    schedule 30.01.2012
comment
Параметр используется во встроенной функции. это не проблема - person Stonpid; 31.01.2012

Очевидно, эта проблема вызвана параметром grid или grid.contextmenu.

Я нашел ответ.

Проблема вызвана следующей строкой.

items: [{ id: 'view', text: 'View Task'}]

Я использовал тот же идентификатор контекстного меню «просмотр».

После того, как это имя изменилось, как показано ниже

items: [{ id: 'viewTask', text: 'View Task'}]

items: [{ id: 'viewContent', text: 'View Content'}]

он работает идеально.

person Stonpid    schedule 30.01.2012