#gwt #gwt2
#gwt #gwt2
Вопрос:
Можно ли выполнить итерацию по всем элементам управления текстовыми полями, определенным в составном виджете? Например, мне нужно извлечь значения всех текстовых полей, чтобы проверить, существуют ли они — в текстовых полях должны быть какие-то данные.
Итак, я надеялся получить метод, подобный:
for(Widget w: this.getChildren)
{
//if widget is a textbox - check value
}
У составного класса нет метода, подобного getChildren, ни метода, с помощью которого я могу получить элементы заданного класса или имени, и если я получу все элементы, используя NodeList, тогда мне нужно рекурсивно перейти, пока я не найду текстовое поле. Есть ли более подходящий способ сделать это?
Ответ №1:
Как автор подкласса Composite, вы можете включить такое поведение, внедрив HasWidgets (или, более конкретно, что-то вроде getWidgetIterator()).
Нет способа сделать это для произвольного составного элемента.
Комментарии:
1. Если кто-то использует HasWidgets — тогда имело бы смысл добавлять виджеты в составной динамически и устанавливать значение provided=true в UiFields?. В противном случае, как пользовательский итератор узнает о количестве добавленных виджетов, если определения присутствуют в ui.xml файлы?
2. Вам пришлось бы запрограммировать итератор, чтобы узнать о виджетах.
ComplexPanel
уже реализованоHasWidgets
, поэтому, если вы создаете свой ui.xml файлы со списком виджетов в потоковой панели (или другой сложной панели), для которых вы можете сделать что-то подобное (дочерний виджет: потоковая панель) {};