dojo EnhancedGrid контекстік мәзірі - мәзір элементінің onclick оқиғасынан rowIndex қалай алуға болады?

Dojo 1.5. Менде келесідей анықталған rowMenu бар кеңейтілген тор бар:

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

Мына мәзір элементіне арналған onclick-ты тыңдаймын:

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

Егер addEditUsers бағдарламасында e.rowIndex пайдалануға тырыссам, ол анықталмаған. Пайдаланушының оң жақ батырмасын басу жолын қалай алуға болатынын білудің жалғыз жолы - бөлек жолды тыңдаушы.

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() функциясын пайдалана алмаймын, себебі ол соңғы рет сол жақта басылған кез келген жолды білдіреді.

0

2 жауаптар

AFAIK, басқа шешім жоқ. Шындығында мен сол сұрақты бірнеше ай бұрын сұрадым, және бұл менің жалғыз шешімім болды.

2
қосылды
Мен сәл кейінірек қазып алдым және дұрыс деп сенемін, сондықтан оны қабылдаймын.
қосылды автор czervik, көзі

Менің де осындай мәселе болды. Мен контекстік мәзір жасауды қалап едім, ол пайдаланушыға детальге тінтуірдің оң жағымен басылған элементті алып тастауға және деректерді дерекқордан жоюға мүмкіндік берді. Бұл өте қарапайым және сіздің көмегіңізбен және кейбір басқа сайттармен бірге төмендегі кодпен келдім деп ойладым.

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
қосылды
EDIT: Жоғарыда келтірілген кодпен кейбір қиындықтар туындаса, ол пайдаланушыға жолға тінтуірді басу мүмкіндігін береді, содан кейін контекстік мәзірді болдырмау немесе басқаша жасыру түймешігін басыңыз, содан кейін деректер торының БЕКІПКІ аймағында тінтуірдің оң жағын басып, Жою мәзірі опциясын таңдаңыз ол дұрыс басылған элементті алып тастайды. Егер бірдей проблема туындаса, менің өзгертілген кодты тексеріңіз БІРГЕ
қосылды автор Andrew Bucklin, көзі