0

GXT 3.x のみ。

Sencha が FileUploadField を意図的に設計して、すべてのキー押下イベントが検出されないようにしていたことは明らかです。

onBrowserEvent(Event) をインターセプトしようとしましたが、FileUploadField コンポーネントにフォーカスしているときにキープレスによって生成されたであろうキープレス イベントを検出できませんでした。

キー プレス イベント シャントはどこにありますか?

キープレス ハンドラの挿入メソッドが見つかりませんでした。

スペースバーを押すか、Enter キーを押してファイルのアップロードを開始できるようにしたいと考えています。

まったく新しいコンポーネントをゼロから書き直す以外に、キーボードで起動するファイルのアップロードという目標を達成するために何ができるか教えてもらえますか?

4

1 に答える 1

3

onBrowserEventイベントをシンクしない限り、イベントを受信しません。必ず を呼び出しましたsinkEventsか? どのようにハンドラーを追加していますか? を使用するaddDomHandlerと、それらはシンクされますが、addHandlerそれらが dom イベントではないか、既に を呼び出していると想定されますsinkEvents。イベントをシンクしないと、ブラウザーはそのイベントを GWT ウィジェットに渡す方法を知りません。すべてのイベントが自動的に沈められた場合、ページ上でマウスを移動するたびに、渡したすべてのウィジェットとそのすべての親に対して mousemove が発生するため、イベントの嵐が発生します。

をオーバーライドonBrowserEventすると、ブラウザからの実際のイベントを処理する方法を説明するメソッドを構築することになります。これは、com.google.gwt.user.client.DOMクラスが Widget に接続してイベントを与える場所です。そのメソッドを final にする以外に、ブラウザーがイベントを生成してイベント リスナーを介して渡す限り、ウィジェット ユーザーがこれらのイベントを取得するのを防ぐ方法はありません。

onBrowserEvent がオーバーライドされて final になった場合でもNativePreviewHandler、 を作成してイベントが発生している場所を確認することで、多くのイベントにアクセスできます。これにより、ウィジェット自体に移動する前にイベントに入ることができます。ウィジェット自体でイベントがNativePreviewEvent.cancel()発生しないようにするために呼び出したり、ハンドラーの早い段階で処理したりできます。

于 2013-04-26T00:20:17.343 に答える