在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/

10-10 05:57