ブラウザのコンテキストメニューを表示しようとしていますdojox.grid.DataGridの内部で作業します。グリッドを今すぐ右クリックすると何も起こりません。 onCellContextMenu、onRowContextMenu、doContextMenu、oncontextmenuをグリッドインスタンス上の空の関数でオーバーライドしようとしましたが、それはうまくいきませんでした。onCellContextMenuメソッドは右クリックで呼び出されましたが、コンテキストメニューを表示しません。私はイベントが別のレベルで停止されていると思うが、私はどこを見るか分からない。
グリッドにはリンクのリストがありますリンクを右クリックすると、新しいタブで開くことができます。私はその機能を提供するためにカスタムのコンテキストメニューを作ることができると知っていますが、今後この動作を無効にする方法を知りたいのです。
回答:
回答№1は4これはちょっと遅くなるかもしれないが、私は走ったソースコードを勉強し、dojoのコミュニティチャットの周りに尋ねることで解決策を見つけました。このソリューションには、以下の変更を加えたカスタムグリッドウィジェットの作成が含まれます。
カスタムグリッドで使用するカスタム_FocusManagerを作成します。ここでは、dojo.stopEventをデフォルトで実行するdoContextMenuメソッドの機能が削除されています。
//extension to remove contextmenu dojo.stopEvent dojo.declare("myGrid.dojox.grid._FocusManager", dojox.grid._FocusManager, { doContextMenu: function() {} });
デフォルトでdojo.stopEventを実行するグリッド内の元のコールバックを削除します。
// stopEventを呼び出す元のコールバックを削除する
onRowContextMenu: function(e) {}, onHeaderContextMenu: function(e) {}
ここでは、私がコミュニティのチャットで与えられた実例を示します: http://jsfiddle.net/kfranqueiro/SqYXd/
回答№2の場合は0
コンテキストメニューを表示するためのソリューションではありませんが、右クリックしてコンテキストメニューを表示する代わりに、それらのリンクをCtrl-leftClickするようにユーザーに伝えてみましたか?
回答№3の場合は0
divにdijit.menuを作成し、その表示をnoneに設定する必要があります。ここでは、コンテキストメニューとグリッドがdijit ContentPaneに含まれている例を示します:
<div dojoType="dijit.layout.ContentPane" title="MyGrid">
<div id="myGridContainer" style="width:100%;height:100%"></div>
<div id="myGridContextMenu" dojoType="dijit.Menu" style="display: none;">
<div dojoType="dijit.MenuItem" id="myGridContextMenu.delete" onClick="deleteItem">Delete</div>
</div>
</div>
また、作成時にメニューをグリッドに接続する必要があります:
var myGrid = new dojox.grid.DataGrid({ ..., onRowContextMenu: myGridcontextMenu },...);