2015-10-24 2 views
0

J'utilise DivElement sur uibinder dans gwt. J'ai besoin de créer le onclick de l'élément div sur la classe java. La classe Element fournit l'element.createFunction() mais je ne comprenais pas comment l'utiliser?Javascript Fonction d'objet dans GWT

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

Un SimplePanel ou FlowPanel sont div + vous pouvez utiliser l'annotation @UiHandler. –

Répondre

0

JavaScriptObject.createFunction() est peu à aucune utilité, car il retournera une fonction qui ne fait rien. Vous devez utiliser JSNI si vous avez besoin d'une fonction JS native.

Mais dans votre cas, vous devriez plutôt profiter de la délégation de l'événement: définir un ClickHandler sur la HTMLPanel et vérifier si la cible de l'événement a été le label ou un enfant de celui-ci:

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

Je pense que le la solution de contournement la plus simple consiste à utiliser Label à la place.

Il utilise l'élément div afin qu'il soit rendu comme vous le souhaitez. En tant que Widget, il a la méthode addClickHandler.

xml:

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

java:

@UiField 
Label label; 

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

je changerais le 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> 

et dans Java

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