2015-06-26 43 views
0

我有一個CellTable,我通過addDomHandler附加了一個單擊處理程序。然後我添加了一個處理onBrowserEvent(...)的自定義單元格。 我想停止事件在單元的onBrowserEvent中傳播,以便不再調用表處理程序。這可能嗎?在CellTable中停止單擊自定義單元格的傳播

table = new CellTable(); 
table.addDomHandler(new ClickHandler() { 
       @Override 
       public void onClick(final ClickEvent pEvent) { 
        Trace.info("this shouldn't trigger"); 
       } 
      }, ClickEvent.getType()); 
table.addColumn(new IdentityColumn<MyVO>(new MyCell())); 

class MyCell extends AbstractCell<MyVO> { 
@Override 
      public void onBrowserEvent(com.google.gwt.cell.client.Cell.Context pContext, Element pParent, 
        Handle<DnSuggestionDetailsVO> pValue, NativeEvent pEvent, 
        ValueUpdater<Handle<DnSuggestionDetailsVO>> pValueUpdater) { 
       Trace.info("cell onBrowserEvent handled, propagation should stop here!"); 
       pEvent.stopPropagation(); 
      } 
} 

謝謝!

回答

1

它很容易取消事件到達小區之前:

table.addCellPreviewHandler(new Handler<Item>() { 
    @Override 
    public void onCellPreview(CellPreviewEvent<Item> event) { 
     //do something 
     event.setCancelled(true); 
    } 
}); 

注意CellPreviewHandler已經監視表中的所有事件。您也可以將它用於ClickEvent(具有更好的控件,如點擊哪個列),而不是將ClickHandler添加到整個表格。

相關問題