在gwt单元表列中,我创建了一个类型为SafeHtmlCell的列。在内部,我覆盖了getvalue()
和onBrowserEvent()
方法。但是当我单击该列时不会触发该事件。请参阅下文
@Override
public SafeHtml getValue(final Object object) {
SafeHtmlBuilder sb = new SafeHtmlBuilder();
sb.appendHtmlConstant("<B>");
sb.appendHtmlConstant(value);
sb.appendHtmlConstant("</B>");
sb.appendHtmlConstant("<i class='icon-pencil'></i></span>");
return sb.toSafeHtml();
}
@Override
public void onBrowserEvent(Context context, Element elem,
Object object, NativeEvent event) {
if ("click".equals(event.getType())) {
EventTarget eventTarget = event.getEventTarget();
if (elem.isOrHasChild(Element.as(eventTarget))) {
Element el = Element.as(eventTarget);
if ("icon-pencil".equals(el.getClassName())) {
Window.alert("Successfully clicked");
}
}
}
}
如何解决呢?我是否还需要覆盖
render()
方法? 最佳答案
创建自定义单元格时,需要覆盖render
方法(而不是getValue
方法),并将HTML放在SafeHtmlBuilder sb
参数内。
然后,如果您想监听事件,则需要覆盖onBrowserEvent
(已完成),但是还需要在类的构造函数中指定consumedEvents
。
您的案例示例:
public class TestCell extends AbstractCell<String> {
public TestCell() {
super("click");
}
@Override
public void onBrowserEvent(Context context, Element parent, String value,
NativeEvent event, ValueUpdater<String> valueUpdater) {
if ("click".equals(event.getType())) {
Window.alert("clicked");
}
}
@Override
public void render(Context context, String value, SafeHtmlBuilder sb) {
sb.appendHtmlConstant("<B>");
sb.appendHtmlConstant(value);
sb.appendHtmlConstant("</B>");
sb.appendHtmlConstant("<i class='icon-pencil'></i></span>");
}
}
关于java - SafeHtmlCell列未触发处理程序onBrowserEvent,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29672523/