ЗК: Слушай все события потомков
В настоящее время я разрабатываю приложение ZK, но не могу найти способ прослушать все SelectEvent
s запускается из всех компонентов ниже одного конкретного (который является единственным, существующим в начале, а затем получает потомков с каждым происходящим в нем выбором или потомка).
Иерархия под этим компонентом будет меняться с каждым SelectEvent
и мне нужно проверять условия каждый раз, когда это происходит.
Единственное, о чем я могу думать, это
- определить функцию, которая делает проверку состояния мне нужно и дополнительно
- добавляет ко всем потомкам (у которых их нет) прослушиватели событий, которые вызывают эту функцию
- зарегистрируйте прослушиватель событий на странице, которая выполняет проверку состояния. стреляет чаще, чем необходимо, но лучше, чем вообще нет.
оба не чувствуют себя хорошо, и последний не является безопасным, если есть несколько корневых компонентов (так как каждый из них имеет свой собственный набор потомков)
Есть ли какой-то способ, который я упустил?
PS: это ZK-версия этого вопроса.
Какой-то код ExpressionTypeSelector
содержит Listbox
выбрать ExpressionModel
, При выборе виджет модели заменяет ExpressionTypeSelector
виджет.
главный:
expressionSelector = new ExpressionTypeSelector()
expressionSelector.widget.setParent(layout)
TermModel
(пример для ExpressionModel
)
class TermModel extends ExpressionModel[BooleanTerm] {
val b1 = new ExpressionTypeSelector
val op = new OperatorSelector
val b2 = new ExpressionTypeSelector
var widget = new Hlayout
for (w ← List(
new Label("("),
b1.widget,
op.widget,
b2.widget,
new Label(")")
)) w.setParent(widget)
}
Вы видите: пользователь может создать дерево TermModel
s. После каждого выбора следует проверить, был ли это последний возможный выбор.
1 ответ
Я не вижу другого простого способа сделать это, кроме как использовать второй вариант. Для этого можно использовать прослушиватель событий уровня страницы. Ссылка на документацию по ЗК здесь