2012-12-05 36 views
1

我創建的GWT 頭<字符串>類上一個DataGrid 使用的自定義實現也採用了ListHandler對此列中的數據進行排序。我試圖處理並取消瀏覽器中的事件類,例如,如果用戶點擊一個特定的<INPUT> 通過這一習俗對象呈現,我們防止「鼠標按下」事件冒泡回直到DataGrid的事件處理程序(因爲這錯誤地觸發了列排序方法,從而阻止用戶將數據輸入<INPUT> 元素)。停車瀏覽器事件冒泡從定製的「頭」類的GWT的DataGrid/ListHandler

我能成功地分離了,我們想通過我的類用下面的代碼實現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的處理程序。當我試圖調試這個問題時,我能夠確認,雖然DOMpreviewEvent方法成功調用DOMeventCancelBubble and DOMeventPreventDefaultDOMdispatchEvent方法仍然被解僱並最終觸發了DataGridfireEventColumnSortEvent

任何指導/方法,以防止GWT DataGrid自動如果自定義標題的特定部分點擊將不勝感激!

回答

3

通過覆蓋DataGrid的onBrowserEvent2 API,您可以通過下面的代碼片段阻止對Header點擊列的排序。

@Override 
protected void onBrowserEvent2(Event event) 
{ 
    EventTarget eventTarget = event.getEventTarget(); 
    if (!Element.is(eventTarget)) 
    { 
     return; 
    } 
    final Element target = eventTarget.cast(); 
    String id = target.getId(); 
    if (id != null && id.equals(COLUMN_HEADER_ID)) 
    { 
     return; 
    } 
    super.onBrowserEvent2(event); 
} 
+1

如果(!ID = NULL && id.equals(COLUMN_HEADER_ID)){ 回報 ;我相信是足夠的 –