2010-10-15 12 views
15

Używam GWT i UiBinder dla mojej aplikacji, a ja staram się robić toatrybuty niestandardowe w UiBinder widżety

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

Ale zwyczaj placeholder atrybut nie będzie działać, ponieważ nie ma setPlaceholder metoda na TextBox - muszę to:

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

powrotem w kodzie java. Wszelkie pomysły, jak to zrobić w samym UiBinder? Sądzę, że mógłbym to zmienić na normalny element wejściowy i spróbować zdobyć referencje i ich wartość, ale wolałbym nie iść tą drogą.

+0

Afaik nie jest to możliwe (jak powiedziałeś, potrzebujesz do tego metody setera). Dlaczego nie ustawić atrybutu w konstruktorze odpowiedniej klasy widoku zaraz po wywołaniu 'initWidget (uiBinder.createAndBindUi (this))? Edytuj: lub napisz własną funkcję zastępczą, która będzie działać również w starszych przeglądarkach. – z00bs

+0

Po tym, jak 'initWidget' jest teraz miejscem, w którym teraz nazywam' setAttribute' ... Nie chcę przenosić prezentacji z plików XML ... –

Odpowiedz

14

Co z tworzeniem niestandardowego SearchBox, który rozszerza się o TextBox za pomocą metody setPlaceholder(String placeholder)?

Następnie w UiBinder:

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

+2

To prawdopodobnie ostatecznie zrobię w tym przypadku, ale Widzę coraz trudniejsze korzystanie z funkcji HTML 5, które są oparte na atrybutach :( –

8

Około rok po tym został poproszony, miałem potrzebę wykorzystania niestandardowych atrybutów (zastępczy, a konkretnie). Napisałem więc następującą niestandardową klasę TextField, która rozszerza się o TextBox, pozostawiając w tekście wszystkie podstawowe funkcje GWT TextBox, w tym procedury obsługi i takie. Mam nadzieję, że ktoś natknie się na to w swoich poszukiwaniach. :)

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

Nie musisz przechowywać symbolu zastępczego jako zmiennej java, możesz bezpośrednio użyć wartości DOM. – logan

Powiązane problemy