0

グリッド/ツリーのitemcontextmenuのリスナーを追加すると、ビューレコード、アイテム、インデックスにアクセスできますが、列を取得するにはどうすればよいですか?

私が作成したいのはcontextMenuですが、ユーザーが最初の列の項目をクリックした場合のみです。

これが私のリスナー関数です:

firstColumnContext: function(view,record,item,index,e,eOpts) {
        console.log(view);
        console.log(record.getName());//this works
        console.log(index);
        console.log('get column');//
},

私のコンセプトは次のようになります。

firstColumnContext: function(view,record,item,index,e,eOpts) {
        e.stopEvent();
        if(record.get('leaf') && 'first column')
        {
                //show context menu here
        }
},

しかし、前に書いたように、右クリックが最初の列にあるかどうかを確認する必要があります。

4

2 に答える 2

2

このコードを参照して、グリッドviewConfigを次のように設定します。

viewConfig: {
            listeners:{
                beforecellcontextmenu: function(view, tableCell, columnIndex, record, tableRow, rowIndex){
                    //your menu code here

                },
                itemcontextmenu: function(view,record,item,index,e,eOpts){
                    e.stopEvent();
                }
            }
        }

列インデックスはbeforecellcontextmenuイベントによって提供されますが、発生したイベントはイベント自体を提供しません。したがって、両方のイベントの組み合わせを使用する必要があります。一方はデフォルトメニューを停止し、もう一方は必要に応じてポップアップします。表示します。

于 2012-06-29T15:28:22.887 に答える
2

私もこの問題を抱えていました。これが、グリッド用に考案した、うまく機能するハックです。クリック時のマウスの位置を各列の位置と比較し、それらが重なっているときを見つけます。

grid.on('itemcontextmenu', function(view, record, item, index, e) {

    var xPos = e.getXY()[0];
    var cols = view.getGridColumns();

    for(var c in cols) {

        var leftEdge = cols[c].getPosition()[0];
        var rightEdge = cols[c].getSize().width + leftEdge;

        if(xPos>=leftEdge && xPos<=rightEdge) {
            console.log(cols[c].dataIndex);
        }
    }
});
于 2014-01-17T18:57:07.587 に答える