GWT CellTable header 和 body 的不同上下文菜单
Different ContextMenus for GWT CellTable header and body
我已经浏览 Whosebug 一个小时了,我就是找不到答案,这正是我需要的。
目前我们正在使用 CellTable 来显示一些数据。 table 的第一行当然是 header。当 right-clicking 在此 table 上的任何位置时,将打开一个上下文菜单。我的客户现在希望在此上下文菜单中有一些额外的选项,但只有在单击 header 时才可以。我目前一直在努力弄清楚右键单击是来自 header 还是 table body。
if ( contextMenu == null )
{
contextMenu = new ContextMenu();
table.sinkEvents(Event.ONCONTEXTMENU);
table.addHandler(new ContextMenuHandler()
{
@Override
public void onContextMenu(ContextMenuEvent event)
{
//here I'd like to check if the clicked row index == 0 and display a different context menu
event.preventDefault();
event.stopPropagation();
contextMenu.setPopupPosition(event.getNativeEvent().getClientX(), event.getNativeEvent().getClientY());
contextMenu.setAutoHideEnabled(true);
contextMenu.show();
}
}, ContextMenuEvent.getType());
}
使用HeaderBuilder
的isHeader()方法:
public void onContextMenu(ContextMenuEvent event) {
// ...
EventTarget eventTarget = event.getNativeEvent().getEventTarget();
Element element = eventTarget.cast();
if(table.getHeaderBuilder().isHeader(element))
// display context menu for header
else
// display context menu for body
}
我已经浏览 Whosebug 一个小时了,我就是找不到答案,这正是我需要的。
目前我们正在使用 CellTable 来显示一些数据。 table 的第一行当然是 header。当 right-clicking 在此 table 上的任何位置时,将打开一个上下文菜单。我的客户现在希望在此上下文菜单中有一些额外的选项,但只有在单击 header 时才可以。我目前一直在努力弄清楚右键单击是来自 header 还是 table body。
if ( contextMenu == null )
{
contextMenu = new ContextMenu();
table.sinkEvents(Event.ONCONTEXTMENU);
table.addHandler(new ContextMenuHandler()
{
@Override
public void onContextMenu(ContextMenuEvent event)
{
//here I'd like to check if the clicked row index == 0 and display a different context menu
event.preventDefault();
event.stopPropagation();
contextMenu.setPopupPosition(event.getNativeEvent().getClientX(), event.getNativeEvent().getClientY());
contextMenu.setAutoHideEnabled(true);
contextMenu.show();
}
}, ContextMenuEvent.getType());
}
使用HeaderBuilder
的isHeader()方法:
public void onContextMenu(ContextMenuEvent event) {
// ...
EventTarget eventTarget = event.getNativeEvent().getEventTarget();
Element element = eventTarget.cast();
if(table.getHeaderBuilder().isHeader(element))
// display context menu for header
else
// display context menu for body
}