Пользовательские атрибуты в виджетах UiBinder

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

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

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

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

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

Ответы

Ответ 1

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

Тогда в UiBinder:

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

Ответ 2

Примерно через год после этого мне нужно было использовать пользовательские атрибуты (в частности, местозаполнитель). Поэтому я написал следующий пользовательский класс 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);
  }
}