在gwt cell table列中,我创建了一个SafeHtmlCell.Inside类型的列,我重写了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()
方法吗?
答案 0 :(得分:1)
创建自定义单元格时,您需要覆盖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>");
}
}
答案 1 :(得分:0)
SafeHtmlCell
没有点击事件,因此我创建了自己的自定义类,该类扩展了AbstractCell<SafeHtml>
并覆盖了onBrowserEvent()
public class CustomSafeHtmlCell extends AbstractCell<SafeHtml>{
public CustomSafeHtmlCell(){
super(BrowserEvents.CLICK);
}
@Override
public void render(com.google.gwt.cell.client.Cell.Context context,
SafeHtml value, SafeHtmlBuilder sb) {
if(value!=null){
sb.append(value);
}
}
@Override
public void onBrowserEvent(Context context, Element parent, SafeHtml value, NativeEvent event,
ValueUpdater<SafeHtml> valueUpdater) {
String eventType = event.getType();
if (BrowserEvents.CLICK.equals(eventType)) {
//logic...
}
}
}
并使用此CustomSafeHtmlCell而不是直接使用SafeHtmlCell。