Как включить контекстное меню браузера в dojox.grid.DataGrid? - PullRequest
2 голосов
/ 03 февраля 2010

Я пытаюсь заставить контекстное меню браузера работать внутри dojox.grid.DataGrid.Когда я щелкаю правой кнопкой мыши по сетке сейчас, ничего не происходит.Я попытался переопределить onCellContextMenu, onRowContextMenu, doContextMenu и oncontextmenu с пустыми функциями в экземпляре сетки, но это не сработало.Метод onCellContextMenu вызывается по щелчку правой кнопкой мыши, но он по-прежнему не показывает контекстное меню.Я думаю, что событие останавливается на другом уровне, но я не уверен, где искать.

В сетке есть список ссылок, и я хочу, чтобы пользователи могли щелкать ссылки правой кнопкой мыши, чтобы они моглиоткройте их в новой вкладке.Я знаю, что могу создать собственное контекстное меню, чтобы обеспечить эту функциональность, но я хотел бы знать, как отключить это поведение в будущем.

Ответы [ 3 ]

4 голосов
/ 18 ноября 2010

Я знаю, что это может быть немного поздно, но я столкнулся с той же самой проблемой и нашел решение, изучив исходный код и спросив в чате сообщества додзё. Решение заключается в создании пользовательского виджета Grid со следующими модификациями:

  1. Создайте пользовательский _FocusManager, который будет использовать ваша пользовательская сетка, где единственным обновлением является удаление функциональности метода doContextMenu, который выполняет dojo.stopEvent по умолчанию - //extension to remove contextmenu dojo.stopEvent dojo.declare('myGrid.dojox.grid._FocusManager', dojox.grid._FocusManager, { doContextMenu: function() {} });

  2. Удалите исходные обратные вызовы в сетке, которые по умолчанию выполняют dojo.stopEvent:

    // удаляем оригинальные обратные вызовы, которые вызывают stopEvent

    onRowContextMenu: function(e) {},
    onHeaderContextMenu: function(e) {}
    

Вот рабочий пример, который мне привели в чате сообщества: http://jsfiddle.net/kfranqueiro/SqYXd/

0 голосов
/ 23 февраля 2010

Вам нужно создать dijit.menu в div и установить его отображение на none. Вот пример, где контекстное меню и сетка содержатся в dijit ContentPane:

<div dojoType="dijit.layout.ContentPane" title="MyGrid">
    <div id="myGridContainer" style="width:100%;height:100%"></div>
    <div id="myGridContextMenu" dojoType="dijit.Menu" style="display: none;">
        <div dojoType="dijit.MenuItem" id="myGridContextMenu.delete" onClick="deleteItem">Delete</div>
    </div>
</div>

Вам также понадобится подключить меню к вашей сетке при создании:

var myGrid = new dojox.grid.DataGrid({ ..., onRowContextMenu: myGridcontextMenu },...);
0 голосов
/ 05 февраля 2010

Я знаю, что это не совсем то решение, которое вам нужно для отображения контекстного меню, но вы пытались сказать своим пользователям Ctrl-leftClick по этим ссылкам вместо щелчка правой кнопкой мыши для отображения контекстного меню?

...