2010-10-15 18 views
15

sto usando GWT e UiBinder per la mia app, e sto cercando di fare questoAttributi personalizzati in UiBinder Widget

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

Ma l'usanza placeholder attributo non funziona perché non c'è un metodo setPlaceholder su TextBox - ho bisogno di questo:

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

indietro nel codice Java. Qualche idea su come farlo in UiBinder stesso? Suppongo che potrei cambiarlo in un normale elemento di input e provare ad afferrare un riferimento e il suo valore, ma preferirei non andare su quella strada.

+0

Afaik questo non è possibile (come hai detto, è necessario un metodo setter per questo). Perché non impostare l'attributo nel costruttore della corrispondente classe di vista subito dopo aver chiamato 'initWidget (uiBinder.createAndBindUi (this))'? Modifica: o scrivi la tua funzionalità segnaposto che funzionerà anche sui browser più vecchi. – z00bs

+0

Dopo 'initWidget' è dove sto chiamando il' setAttribute' in questo momento ... Non voglio spostare la presentazione dai file XML ... –

risposta

14

Informazioni sulla creazione di SearchBox personalizzato che estende TextBox con il metodo setPlaceholder(String placeholder)?

Poi nel UiBinder:

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

+2

Probabilmente è quello che farò in questo caso, ma Mi sembra sempre più difficile utilizzare le funzionalità di HTML 5 basate su attributi :( –

8

Circa un anno dopo questo è stato chiesto, ho avuto la necessità di utilizzare attributi personalizzati (segnaposto, in particolare). Così ho scritto la seguente classe personalizzata TextField che si estende TextBox, lasciando intatta tutta la funzionalità sottostante di un GWT TextBox compresi i gestori e così via. Spero che qualcuno si imbatta in questo nelle loro ricerche. :)

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

Non è necessario memorizzare il segnaposto come una variabile java. Puoi semplicemente utilizzare direttamente il valore DOM. – logan

Problemi correlati