ЗК: Слушай все события потомков - PullRequest
1 голос
/ 16 июля 2011

В настоящее время я разрабатываю приложение ZK, но не смог найти способ прослушивания всех SelectEvent, запущенных из всех компонентов ниже одного конкретного (который является единственным, существующим в начале, а затем получает потомков с каждый выбор происходит в нем или потомке).

Иерархия под этим компонентом будет меняться с каждым SelectEvent, и мне нужно проверять условия каждый раз, когда это происходит.

Единственное, о чем я могу думать, это

    1. определяет функцию, которая выполняет проверку состояния, в которой я нуждаюсь, и дополнительно
    2. добавляет ко всем потомкам (у которых их нет) прослушиватели событий, которые вызывают эту функцию
  1. зарегистрировать прослушиватель событий на странице, которая выполняет проверку состояния. стреляет чаще, чем необходимо, но лучше, чем вовсе.

оба не чувствуют себя хорошо, и последний не безопасен, если есть несколько корневых компонентов (поскольку у каждого из них есть свой собственный набор потомков)

Есть ли способ, которым я упустил из виду?

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 с. После каждого выбора он должен проверить, был ли это последний возможный выбор.

1 Ответ

0 голосов
/ 17 июля 2011

Я не вижу другого простого способа сделать это, кроме как использовать второй вариант. Для этого можно использовать прослушиватель событий уровня страницы. Ссылка из документации ЗК на это здесь

...