GWT中的Javascript对象函数

GWT中的Javascript对象函数,javascript,java,function,gwt,Javascript,Java,Function,Gwt,我在gwt的uibinder上使用DivElement。我需要在java类上创建div元素的onclick。Element类提供了Element.createFunction(),但我不明白如何使用它 **abc.ui.xml** <g:HTMLPanel ui:field="html"> <div class="lfloat" ui:field="label"></div> </g:HTMLPanel> abc.java @UiFi

我在gwt的uibinder上使用DivElement。我需要在java类上创建div元素的onclick。Element类提供了Element.createFunction(),但我不明白如何使用它

**abc.ui.xml**

<g:HTMLPanel ui:field="html">
    <div class="lfloat" ui:field="label"></div>
</g:HTMLPanel>

abc.java

@UiField DivElement label;

public abc() 
{
    // TODO Auto-generated constructor stub
    initWidget(uiBinder.createAndBindUi(this));

    label.setClassName("hyperlink_labels");
    //JavaScriptObject js = label.createFunction();

    //how to create function for this DivElement

}
**abc.ui.xml**
java
@UiField元素标签;
公共广播
{
//TODO自动生成的构造函数存根
initWidget(uiBinder.createAndBindUi(this));
label.setClassName(“超链接标签”);
//JavaScriptObject js=label.createFunction();
//如何为此元素创建函数
}

JavaScriptObject.createFunction()
几乎没有用处,因为它将返回一个不执行任何操作的函数。如果需要本机JS函数,则需要使用JSNI

但在您的情况下,您更应该利用事件委派:在
HTMLPanel
上设置
ClickHandler
,并检查事件目标是
标签还是它的子项:

addClickHandler(新的ClickHandler(){
@凌驾
公共作废一次点击(点击事件){
EventTarget=event.getNativeEvent().getEventTarget();
if(Node.is(target)&&label.isOrHasChild(Node.as(target))){
//已单击标签
}
}
}

我认为最简单的解决方法是使用

它使用
div
元素,因此它将按照您想要的方式呈现。作为一个小部件,它具有
addClickHandler
方法

xml:


我将更改ui.xml

<g:SimplePanel ui:field="html">
    <g:SimplePanel class="lfloat" ui:field="label" />
    <!-- I am not 100% sure, if the class-attribute is named style -->
</g:SimplePanel>

SimplePanel或FlowPanel是div+,您可以使用@UiHandler注释。
@UiField
Label label;

label.addClickHandler(new ClickHandler() {
    @Override
    public void onClick(ClickEvent event) {
        ...
    }
});
<g:SimplePanel ui:field="html">
    <g:SimplePanel class="lfloat" ui:field="label" />
    <!-- I am not 100% sure, if the class-attribute is named style -->
</g:SimplePanel>
@UiHandler("label") public void onClick(ClickEvent e){...}