Остановить распространение клика по пользовательской ячейке в CellTable

У меня есть CellTable, к которому я прикрепляю обработчик кликов (через addDomHandler). Затем я добавил пользовательскую ячейку, которая обрабатывает onBrowserEvent(...). Я бы хотел, чтобы событие не распространялось в onBrowserEvent ячейки, чтобы обработчик таблицы больше не вызывался. Это возможно?

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 во всю таблицу.

Другие вопросы по тегам