Пользовательские атрибуты в виджетах UiBinder - PullRequest
15 голосов
/ 15 октября 2010

Я использую GWT и UiBinder для своего приложения и пытаюсь сделать это

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

Но пользовательский атрибут placeholder не будет работать, потому что тамне setPlaceholder метод на TextBox - мне нужно это:

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

обратно в код Java.Любые идеи о том, как сделать это в самом UiBinder?Я полагаю, я мог бы изменить его на обычный элемент ввода и попытаться получить ссылку и ее значение, но я бы предпочел не идти по этому пути.

Ответы [ 2 ]

14 голосов
/ 15 октября 2010

А как насчет создания пользовательского SearchBox, расширяющего TextBox с методом setPlaceholder(String placeholder)?

Затем в UiBinder:

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

8 голосов
/ 14 октября 2011

Примерно через год после того, как об этом спросили, мне нужно было использовать пользовательские атрибуты (в частности, заполнитель). Поэтому я написал следующий пользовательский класс TextField, который расширяет TextBox, оставляя в такте все основные функции GWT TextBox, включая обработчики и тому подобное. Надеюсь, что кто-то натыкается на это в своих поисках. :)

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);
  }
}
...