Есть ли в Dojo расширенный пример сетки с контекстным меню? - PullRequest
1 голос
/ 18 апреля 2010

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

Ответы [ 3 ]

1 голос
/ 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 в ваше объявление.

0 голосов
/ 24 октября 2012

Вот как получить доступ к выбранной строке из контекстного меню:

// First create a menu object to hold the various menus
var menusObject = {
    //  headerMenu: new dijit.Menu(),
rowMenu: new dijit.Menu()//,
//  cellMenu: new dijit.Menu(),
//   selectedRegionMenu: new dijit.Menu()
};

Добавить пункт меню

menusObject.rowMenu.addChild(new dijit.MenuItem({
    label: "Show me data",
    onClick: function(e){
        console.log(this.selectedRow)
    }
}));

menusObject.rowMenu.startup();

Создать сетку

var grid = new dojox.grid.EnhancedGrid({
    store : store,
structure : layout,
rowsPerPage: 10,
escapeHTMLInData: false,
plugins: {
    menus: menusObject
}
}, 'some are to place');

// Активировать отправку сообщения из строки сетки данных в пункты меню

dojo.connect(grid, 'onRowContextMenu', function(e)
{
    // Set the "selectedItem" property of all of the menu items of a menu.  This lets you reference the row data!!

    var menuChildren = menusObject.rowMenu.getChildren();
    for(var i = 0; i<menuChildren.length; i++){
        menuChildren[i].selectedRow = this.getItem(e.rowIndex);
    }
});
0 голосов
/ 28 апреля 2010

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

...