在我的一個項目中,我不得不這樣做。我建議使用CellClickHandler
,而不是試圖捕捉點擊錨點。
首先爲您的點擊操作創造更方便的處理程序:
public interface CellClickAction<P> {
void onCellClick(P proxy);
}
使用這個插件保持在網格中的每一個ValueProvider映射:
public class GridCellClickPlugin<P> implements ComponentPlugin<Grid<P>> {
private final Map<ValueProvider<P, ?>, CellClickAction<P>> mapping;
public GridCellClickPlugin() {
this.mapping = new HashMap<ValueProvider<P, ?>, CellClickAction<P>>();
}
@Override
public void initPlugin(final Grid<P> component) {
component.addCellClickHandler(new CellClickHandler() {
@Override
public void onCellClick(CellClickEvent event) {
if (!mapping.isEmpty()) {
final ColumnConfig<P, ?> columnConfig = component.getColumnModel().getColumn(event.getCellIndex());
final CellClickAction<P> action = mapping.get(columnConfig.getValueProvider());
if (action != null) {
final P proxy = component.getStore().get(event.getRowIndex());
action.onCellClick(proxy);
}
}
}
});
}
}
註冊單擊處理此列和init插件:
final GridCellClickPlugin<LinkData> plugin = new GridCellClickPlugin<LinkData>();
plugin.getMapping().put(lp.url(), new CellClickAction<LinkData>() {
@Override
public void onCellClick(LinkData proxy) {
//do the desired action here: redirect to some url, show pop-up window, etc
}
});
plugin.init(grid);
以鏈接形式呈現您的文本:
linkConf = new ColumnConfig<LinkData, String>(lp.url(), 200, "URL");
linkConf.setCell(new AbstractCell<LinkData>() {
@Override
public void render(com.google.gwt.cell.client.Cell.Context context, LinkData value, SafeHtmlBuilder sb) {
final Anchor anchor = new Anchor(value.getSomeText());
sb.appendHtmlConstant(anchor.getElement().toString());
}
});
我總是downvote沒有代碼或任何嘗試解決問題的問題 –
好點。我的帖子應該更完整。這是我迄今爲止(在下面的「答案」中)。 –
@ R.V。這可能更適合這個問題,而不是作爲「答案」。這樣,新讀者可以正確地將其與問題聯繫起來。 – Whymarrh