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