停止在CellTable中单击自定义单元格的传播

时间:2015-06-26 16:40:04

标签: events gwt gwt-celltable event-propagation

我有一个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 个答案:

答案 0 :(得分:1)

在事件到达单元格之前取消事件更容易:

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

请注意,CellPreviewHandler已经监视表中的所有事件。您也可以将它用于ClickEvent(使用更精细的控件,如单击哪个列),而不是将ClickHandler添加到整个表中。