0

たとえば、 がありTreeGrid、 に を追加しContextMenuましたTreeGridContextMenuここで、ユーザーがリーフ ノードを右クリックしたときにのみ描画したいと考えています。私の考えは、いつContextMenu描画されようとしているのかを検出し、右クリックしたノードがリーフ ノードであるかどうかを確認することです。

  • ノードが葉の場合、ContextMenu
  • ノードがリーフでない場合、描画をキャンセルします

しかし、どのイベントがコンポーネントの描画を処理するのでしょうか?

アップデート:

showContextMenuHandler機能しません。実際にはこれはバグです。なぜなら、 contextMenu.showSmartGWT () と言うと、実際には 2 つSmartGWTのコンテキスト メニューが表示されるからです。 [すべて]、[ページ ソース]、..) を選択します。、 ...についても同様です。LeafContextClickHandler

これが、ContextMenu 自体に描画ハンドラーを追加して、特別な場合に描画されないようにする理由です。

バグを説明する画像は次のとおりです。

ここに画像の説明を入力

4

2 に答える 2

1

これを行うにはいくつかの方法があります。描画されるコンポーネントへの参照が必要です。次に、DrawHandler、VisibilityChangedHandler、またはこの例の場合は ShowContextMenuHandler を追加できます。

ただし、あなたの例では、上記のメカニズムを実現するためのより良い方法は、TreeGrid で LeafClickHandlers と FolderClickHandlers を使用することだと思います。

于 2012-03-05T14:37:05.903 に答える
0

ShowContextMenuHandler に関する問題はバグではなく、SmartGWT の「機能」です。いずれにせよ、ブラウザーのメニューを表示したくない場合は、ブラウザーへのイベントの伝搬を停止するだけです。これは、次のコード スニペットを使用して簡単に実現できます。

addShowContextMenuHandler(new ShowContextMenuHandler() {

        @Override
        public void onShowContextMenu(ShowContextMenuEvent event) {
            //Do not propagate to the browser's menu!
            event.cancel();
            //Continue with your code .... 
        }
    }
于 2012-03-05T23:44:25.193 に答える