2

ブラウザのコンテキストメニューをdojox.grid.DataGrid内で機能させようとしています。グリッドを右クリックしても何も起こりません。onCellContextMenu、onRowContextMenu、doContextMenu、およびoncontextmenuをグリッドインスタンスの空の関数でオーバーライドしようとしましたが、機能しませんでした。メソッドonCellContextMenuは右クリックで呼び出されますが、それでもコンテキストメニューは表示されません。イベントは別のレベルで停止されていると思いますが、どこを見ればよいのかわかりません。

グリッドにはリンクのリストがあり、ユーザーがリンクを右クリックして新しいタブで開くことができるようにしたいと思います。その機能を提供するカスタムコンテキストメニューを作成できることは知っていますが、将来この動作を無効にする方法を知りたいです。

4

3 に答える 3

4

これは少し遅いかもしれませんが、私はまったく同じ問題に遭遇し、ソースコードを調べて、dojoコミュニティチャットについて尋ねることで解決策を見つけました。このソリューションには、次の変更を加えたカスタムグリッドウィジェットの作成が含まれます。

  1. カスタムグリッドが使用するカスタム_FocusManagerを作成します。ここでの唯一の更新は、デフォルトでdojo.stopEventを実行するdoContextMenuメソッドの機能を削除することです- //extension to remove contextmenu dojo.stopEvent dojo.declare('myGrid.dojox.grid._FocusManager', dojox.grid._FocusManager, { doContextMenu: function() {} });

  2. デフォルトでdojo.stopEventを実行するグ​​リッド内の元のコールバックを削除します。

    //stopEventを呼び出す元のコールバックを削除します

    onRowContextMenu: function(e) {},
    onHeaderContextMenu: function(e) {}
    

これが私がコミュニティチャットで与えられた実例です:http://jsfiddle.net/kfranqueiro/SqYXd/

于 2010-11-18T16:29:58.393 に答える
0

コンテキストメニューを表示するための解決策ではないことはわかっていますが、ユーザーに右クリックしてコンテキストメニューを表示するのではなく、Ctrlキーを押しながら左クリックするように指示してみましたか?

于 2010-02-05T13:49:27.263 に答える
0

divにdijit.menuを作成し、その表示をnoneに設定する必要があります。コンテキストメニューとグリッドがdijitContentPaneに含まれている例を次に示します。

<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 },...);
于 2010-02-23T14:58:08.630 に答える