2012-02-16 12 views
6

Sto cercando un modo per specificare l'attributo segnaposto all'interno di un elemento <g:SuggestBox>, in GWT. So che l'elemento <input> consente di specificare quell'attributo, ma ho deciso di passare all'elemento SuggestBox invece di quello di input.SuggestBox GWT con attributo segnaposto

Qualcuno può aiutarmi?

+0

È possibile definire qualsiasi proprietà aggiuntive adattamento [questa soluzione] (http://stackoverflow.com/questions/10450987/how-to-add-a-placeholder-to-a-gwt-text-input-field/38316205#38316205). –

risposta

8

È necessario creare il proprio widget SuggestBox personalizzato, dopo di che è possibile impostare attributo segnaposto su di esso. Ad esempio:

public class CustomSuggestBox extends SuggestBox { 


private String placeHolderText = ""; 

    public String getPlaceHolderText() { 
    return placeHolderText; 
    } 

    public void setPlaceHolderText(String text) { 
    placeHolderText = text; 
    getTextBox().getElement().setAttribute("placeHolder", placeHolderText); 
    } 
} 

Quindi, è possibile impostare questa proprietà nel raccoglitore UI.

<widgets:CustomSuggestBox ui:field="cSuggestBox" placeHolderText="someText" /> 

PS: Funziona solo nel browser moderno. Per implementare correttamente per browser meno recenti e il check out di terze parti lib wogwt, ha TextBoxWithPlaceholder classe che estende TextBox:

/** 
* A text box that displays a placeholder string when empty 
* 
* <h3>CSS Style Rules</h3> 
* <ul class='css'> 
* <li>.wogwt-TextBoxWithPlaceholder { primary style }</li> 
* <li>.wogwt-TextBoxWithPlaceholder-placeholder { dependent style set when 
* the placeholder is displayed }</li> 
* </ul> 
*/ 

In questo caso si può inviare questo TextBoxWithPlaceholder 's esempio per SuggestBox(SuggestOracle oracle, TextBoxBase box) costruttore.

+0

Non sono sicuro che questo codice getTextBox(). GetElement(). GetStyle(). SetProperty ("placeholder", placeHolderText); è corretta. Penso che dovrebbe essere come descritto di seguito. – user1545858

9

Una sottoclasse di SuggestBox funzionerebbe sicuramente.
Se non si desidera creare una classe aggiuntiva è inoltre possibile aggiungere facilmente il segnaposto a un SuggestBox esistente impostando l'attributo direttamente:

SuggestBox suggestBox = new SuggestBox(); 
suggestBox.getElement().setAttribute("placeHolder", "SOME TEXT); 
2

Nota che si otterrà un'eccezione se si chiama il metodo getElement() prima che il widget venga aggiunto al DOM. Quindi, se si vuole una soluzione che permette di impostare il testo segnaposto prima di essere aggiunto al DOM, e farlo apparire una volta che è inserito, è possibile collegare in al AttachEvent:

SuggestBox suggestBox = new SuggestBox(); 
// com.google.gwt.event.logical.shared.AttachEvent.Handler 
suggestBox.addAttachHandler(new Handler() { 
    @Override 
    public void onAttachOrDetach(AttachEvent event) { 
     if (event.isAttached()) { 
      suggestBox.getElement().setAttribute("placeHolder", "SOME TEXT); 
     } 
    } 
});