2015-10-24 26 views
0

我在gwt中的uibinder上使用DivElement。我需要在java類上創建div元素的onclick。 Element類提供了element.createFunction(),但我無法理解如何使用它?GWT中的Javascript對象函數

**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 

} 
+0

SimplePanel或FlowPanel是div +,您可以使用@UiHandler註釋。 –

回答

0

JavaScriptObject.createFunction()是幾乎沒有使用,因爲它會返回一個什麼都不做的函數。如果您需要本機JS功能,則需要使用JSNI。

但在你的情況,你倒是應該充分利用事件代表團:設置在HTMLPanel一個ClickHandler和檢查活動對象是否是label或它的孩子:

addClickHandler(new ClickHandler() { 
    @Override 
    public void onClick(ClickEvent event) { 
    EventTarget target = event.getNativeEvent().getEventTarget(); 
    if (Node.is(target) && label.isOrHasChild(Node.as(target))) { 
     // label was clicked 
    } 
    } 
} 
0

我認爲,最簡單的解決方法是使用Label代替。

它使用div元素,所以它會像你想要的那樣呈現。作爲一個小工具,它有addClickHandler方法。

XML:

<g:Label styleName="lfloat" ui:field="label" /> 

的java:

@UiField 
Label label; 

label.addClickHandler(new ClickHandler() { 
    @Override 
    public void onClick(ClickEvent event) { 
     ... 
    } 
}); 
0

我會改變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> 

,並在Java

@UiHandler("label") public void onClick(ClickEvent e){...}