GWT Uibinder композитный - PullRequest
3 голосов
/ 17 мая 2010

Я создаю составной виджет uibinder с надписью и TextBox.

Предполагаемое использование:

<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> делает.

Любая помощь очень ценится.

Ответы [ 3 ]

3 голосов
/ 17 мая 2010

Я нашел возможную реализацию, посмотрев исходный код виджета 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();
}
...
0 голосов
/ 18 мая 2010

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

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

0 голосов
/ 17 мая 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);
}
...