контекстное меню Dojo EnhancedGrid - как получить rowIndex из события onclick пункта меню? - PullRequest
0 голосов
/ 28 октября 2011

Додзё 1.5. У меня есть расширенная сетка, в которой rowMenu определено так:

<div dojoType="dijit.Menu" id="rowMenu" style="display: none;">
    <div dojoType="dijit.MenuItem" id="menuUsers">Add/Edit Users</div>
</div>     

Я слушаю клик по этому пункту меню следующим образом:

dojo.connect(dijit.byId("menuUsers"), "onClick", addEditUsers);

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

dojo.connect(dijit.byId("grid"), "onRowContextMenu", rowContextMenu);

Из rowContextMenu () доступен e.rowIndex, поэтому я могу получить данные строки, используя

var item = e.grid.getItem(e.rowIndex);
console.log(e.grid.store.getValue(item, 'name')); // this will show the value of a 'name' column for the row the user right clicked.

Так что я мог бы использовать это для переключения глобального / объекта (например, currentContextItem), но кажется, что должен быть более простой подход. Разве нет прямого способа получить данные rowIndex / из слушателя пункта контекстного меню? Обратите внимание, что я не могу использовать grid.selection.getSelected (), потому что это та строка, по которой пользователь щелкнул последний раз.

Ответы [ 2 ]

2 голосов
/ 18 ноября 2011

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

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>

Конечно, если вы создавали свою DataGrid программным способом, вы просто добавили бы onRowContextMenu: onRowContextMenuFunc в ваше объявление.

2 голосов
/ 29 октября 2011

AFAIK, другого решения нет. Фактически, я задавал тот же вопрос несколько месяцев назад, и это было единственное решение, которое я получил.

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