2010-10-15 8 views
15

J'utilise GWT et UiBinder pour mon application, et je suis en train de le fairepersonnalisés attributs dans UiBinder widgets

<g:TextBox ui:field="searchBox" styleName="{style.searchBox}" placeholder="search" />

Mais la coutume placeholder attribut ne fonctionnera pas parce qu'il n'y a pas une méthode setPlaceholder sur TextBox - Je dois ceci: retour dans le code java

searchBox.getElement().setAttribute("placeholder", "search");

. Des idées sur la façon de le faire dans UiBinder lui-même? Je suppose que je pourrais le remplacer par un élément d'entrée normal et essayer d'obtenir une référence et sa valeur, mais je préfère ne pas aller dans cette direction.

+0

Afaik ce n'est pas possible (comme vous l'avez dit, vous avez besoin d'une méthode de setter pour cela). Pourquoi ne pas définir l'attribut dans le constructeur de la classe de vue correspondante juste après avoir appelé 'initWidget (uiBinder.createAndBindUi (this))'? Edit: ou écrivez votre propre fonctionnalité d'espace réservé qui fonctionnera aussi sur les navigateurs plus anciens. – z00bs

+0

Après 'initWidget' est où j'appelle le' setAttribute' en ce moment ... Je ne veux pas déplacer la présentation hors des fichiers XML ... –

Répondre

14

Qu'en est-il de créer SearchBox personnalisé qui s'étend TextBox avec la méthode setPlaceholder(String placeholder)?

Puis, en UiBinder:

<custom:SearchBox ui:field="searchBox" styleName="{style.searchBox}" placeholder="search" />

+2

C'est probablement ce que je ferai finalement dans ce cas, mais Je vois qu'il devient de plus en plus difficile d'utiliser les fonctionnalités HTML 5 qui sont basées sur les attributs :( –

8

Environ un an après cela a été demandé, j'ai eu besoin d'utiliser des attributs personnalisés (espace réservé, en particulier). J'ai donc écrit la classe personnalisée suivante TextField qui s'étend TextBox, laissant intact toutes les fonctionnalités sous-jacentes d'un GWT TextBox, y compris les gestionnaires et autres. J'espère que quelqu'un trébuchera sur ceci dans leurs recherches. :)

public class TextField extends TextBox { 

    String placeholder = ""; 

    /** 
    * Creates an empty text box. 
    */ 
    public TextField() {} 

    /** 
    * Gets the current placeholder text for the text box. 
    * 
    * @return the current placeholder text 
    */ 
    public String getPlaceholder() { 
     return placeholder; 
    } 

    /** 
    * Sets the placeholder text displayed in the text box. 
    * 
    * @param placeholder the placeholder text 
    */ 
    public void setPlaceholder(String text) { 
     placeholder = (text != null ? text : ""); 
     getElement().setPropertyString("placeholder", placeholder); 
    } 
} 
+3

Vous n'avez pas besoin de stocker l'espace réservé en tant que variable java, vous pouvez simplement utiliser la valeur DOM directement. – logan

Questions connexes