この列のデータを並べ替えるためにListHandlerも使用するDataGrid列で使用するGWTHeader <String>クラスのカスタム実装を作成しています。ユーザーがこのカスタムHeaderオブジェクトによってレンダリングされた特定の<INPUT>要素をクリックした場合に、「mousedown」イベントがDataGridのイベントハンドラーに戻るのを防ぐように、 HeaderクラスのBrowserイベントを処理およびキャンセルしようとしています。 (これにより、ListHandlerの列の並べ替えメソッドが誤ってトリガーされ、ユーザーが問題の<INPUT>要素にデータを入力できなくなります)。
次のコードを使用してHeaderクラスにNativePreviewHandlerを実装することで、バブルアップを「キャンセル」するイベントを正常に分離できます。
@Override
public void onPreviewNativeEvent(NativePreviewEvent event) {
final NativeEvent natEvent = event.getNativeEvent();
final Element element = natEvent.getEventTarget().cast();
final String eventType = natEvent.getType();
if ("mousedown".equals(eventType)) {
if (element.getTagName().equals("INPUT")) {
natEvent.preventDefault();
natEvent.stopPropagation();
event.cancel();
}
}
return;
}
残念ながら、preventDefault()、stopPropagation()、またはevent.cancel()メソッドの組み合わせは、mousedownイベントが親DataGridのハンドラーにバブリングするのを正常に停止しません。この問題をデバッグしようとすると、DOMであるにもかかわらず、それを確認できました。PreviewEventメソッドがDOMを正常に呼び出しました。eventCancelBubbleおよびDOM。eventPreventDefault、DOM。dispatchEventメソッドは引き続き起動され、最終的にDataGridをトリガーしました。fireEventとColumnSortEvent。
カスタムヘッダーの特定の部分がクリックされた場合にGWTDataGridがそれ自体に頼らないようにするためのガイダンス/アプローチは大歓迎です!