0

道場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/data を取得する直接的な方法はありませんか? grid.selection.getSelected() はユーザーが最後にクリックした行であるため、使用できないことに注意してください。

4

2 に答える 2

2

私の知る限り、他に解決策はありません。実際、私は数か月前に同じ質問をしましたが、それが唯一の解決策でした。

于 2011-10-29T18:59:09.107 に答える
2

同様の質問がありました。ユーザーが右クリックしたアイテムをデータグリッドから削除し、データストアからアイテムを削除できるコンテキスト メニューを作成したいと考えていました。あなたの助けといくつかの他のサイトで、私は次のコードを思いつきました。

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を宣言に追加するだけです。

于 2011-11-17T22:46:25.757 に答える