Контекстное меню Dojo DataGrid onRowContextMenu отображается даже при щелчке правой кнопкой мыши в области BLANK DataGrid. - PullRequest
2 голосов
/ 18 ноября 2011

У меня есть DataGrid, в котором есть элементы. Когда вы щелкаете правой кнопкой мыши по одной из строк, отображается контекстное меню Dojo с возможностью удалить эту строку. Если вы попытаетесь щелкнуть правой кнопкой мыши пустую область DataGrid, контекстное меню НЕ отобразится .... НО, если сначала щелкнуть правой кнопкой мыши строку, а затем щелкнуть пункт меню «Отмена» (который ничего не делает) или, если Вы щелкаете левой кнопкой мыши в другом месте на странице (которая скрывает контекстное меню) и щелкаете правой кнопкой мыши в пустой области DataGrid, контекстное меню отображается, и, если вы щелкнете опцию «Удалить элемент» в контекстном меню, оно удалит последний элемент, на котором вы щелкнули правой кнопкой мыши.

Почему контекстное меню отображается, когда вы щелкаете правой кнопкой мыши в пустой области DataGrid, но только ПОСЛЕ , когда вы уже щелкнули правой кнопкой мыши по элементу в DataGrid

Любые советы будут оценены. Вот мой код:

var selectedItem;  // This has to be declared "globally" outside of any functions

function onRowContextMenuFunc(e) {
    grid5_rowMenu.bindDomNode(e.grid.domNode);
    selectedItem = e.grid.getItem(e.rowIndex);
}

function gridRowContextMenu_onClick(e) {
    store3.deleteItem(selectedItem);
}

.

<div dojoType="dijit.Menu" id="grid5_rowMenu" jsId="grid5_rowMenu" style="display: none;">
    <div dojoType="dijit.MenuItem" onClick="gridRowContextMenu_onClick">Delete</div>
    <div dojoType="dijit.MenuItem">Cancel</div>
</div>

.

<div id="grid" dojoType="dojox.grid.DataGrid" jsId="grid5" store="store3" structure="layoutStructure" rowsPerPage="40" onRowContextMenu="onRowContextMenuFunc"></div>

Ответы [ 2 ]

3 голосов
/ 21 ноября 2011

Ну, я не совсем уверен, почему это позволяет контекстному меню показывать при щелчке правой кнопкой мыши в пустой области только после первого щелчка правой кнопкой мыши по элементу, но я нашел способ обойти мою корневую проблему: Если щелкнуть правой кнопкой мыши элемент строки в сетке данных, затем щелкнуть, чтобы скрыть контекстное меню, затем щелкнуть правой кнопкой мыши в пустой области сетки данных и выбрать пункт меню, чтобы вызвать rowIndex первого щелчка правой кнопкой мыши. для прохождения

Вот мой код; Я надеюсь, что это поможет любому в будущем, у которого есть та же самая проблема:

 var selectedItem;

 function onRowContextMenu(e) {
      grid5_rowMenu.bindDomNode(e.grid.domNode);
      selectedItem = e.grid.getItem(e.rowIndex);
 }

 function gridRowContextMenuExecute(task) {
      if((task == "remove") && (selectedItem != null)) {
           store3.deleteItem(selectedItem);
      }
      else {
           selectedItem = null;
      }
 }

.

 <div dojoType="dijit.Menu" id="grid5_rowMenu" jsId="grid5_rowMenu" style="display: none;" onBlur="gridRowContextMenuExecute('cancel')">
      <div dojoType="dijit.MenuItem" onMouseDown="gridRowContextMenuExecute('remove')">Remove from Transaction</div>
      <div dojoType="dijit.MenuItem">Cancel</div>
 </div>

.

 <div id="grid" dojoType="dojox.grid.DataGrid" jsId="grid5" store="store3" structure="layoutStructure" rowsPerPage="40" onRowContextMenu="onRowContextMenu"></div>
0 голосов
/ 11 января 2014

grid5_rowMenu - это меню.

e.grid.domNode - это узел DOM сетки данных.

* grid5_rowMenu.bindDomNode (e.grid.domNode); *

Это: дать контекстное меню для сетки (в любом месте внутри узла DOM).

Поскольку содержимое в сетке данных постоянно изменяется, поэтому нелегко присвоить меню элементу в сетке.

Если ваша сетка не меняет своего содержимого, вы можете сделать это следующим образом: * Grid5_rowMenu.bindDomNode (e.target.parentElement); *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...