2015-06-26 2 views
0

У меня есть CellTable, к которому я прикрепляю обработчик кликов (через addDomHandler). Затем я добавил пользовательскую ячейку, которая обрабатывает onBrowserEvent (...). Я хотел бы остановить событие для распространения в onBrowserEvent ячейки, чтобы обработчик таблицы больше не вызывался. Это возможно?stop click распространение пользовательской ячейки в 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 ко всей таблице.

Смежные вопросы