Уибиндерный композит GWT

Я создаю составной виджет uibinder с меткой и текстовым полем.

Целевое использование:

<x:XTextBox ui:field="fieldName" label="a caption" >
    The text to be put in the box.
</x:XTextBox>

Я нашел, как поймать метку с помощью пользовательского конструктора @UiConstructor, я мог бы добавить еще один параметр в конструктор, но я хотел бы знать, как получить текст из xml, как это делает тег GWT <g:Label>a caption</g:Label>.

Любая помощь приветствуется.


person Han Fastolfe    schedule 17.05.2010    source источник


Ответы (3)


Я нашел возможную реализацию, просмотрев исходный код виджета Label.

Ключевым моментом является то, что составной виджет должен реализовывать интерфейс HasText. поэтому в объявлении и в теле:

public class XTextBox extends Composite implements HasText ...
...
@UiField TextBox textBox;
...
public void setText(String text) {
    textBox.setText(text);
}
public String getText() {
    return textBox.getText();
}
...
person Han Fastolfe    schedule 17.05.2010

Просто поместите текст в другой параметр вашего виджета, и ваш @UiConstructor примет этот параметр. Это:

<x:XTextBox ui:field="fieldName" label="a caption" 
  text="The text to be put in the box." />

Тогда ваш XTextBox.java будет иметь следующее:

@UiField TextBox textBox;

@UiConstructor XTextBox(String label, String text) {
  initWidget(uiBinder.createAndBindUi(this));
  textBox.setValue(text);
}
person aem    schedule 17.05.2010

Хан прав; HasText — это то, что вам нужно реализовать. Одна вещь, которую я нашел удобной, - это просмотреть источник, если вы знаете, что виджет Google делает что-то, что вы хотели бы сделать. например

http://www.google.com/codesearch/p?hl=en#A1edwVHBClQ/user/src/com/google/gwt/user/client/ui/Label.java

person Kong    schedule 18.05.2010