【发布时间】:2011-10-06 18:00:30
【问题描述】:
我目前正在开发一个 ZK 应用程序,但找不到一种方法来侦听从一个特定以下的所有组件触发的所有 SelectEvents(这是一开始就存在的唯一一个,然后得到后代每个选择都发生在它或后代中)。
这个组件下面的层次结构会随着每个SelectEvent而改变,每次发生这种情况时我都需要检查条件。
我能想到的只有
- 定义一个函数来执行我需要的条件检查,另外
- 向所有调用此函数的子代(没有一个)事件侦听器添加
- 在进行条件检查的页面上注册一个事件监听器。比必要时更频繁地触发,但总比不触发要好。
两者都感觉不对,如果存在多个根组件,后者也不安全(因为每个根组件都有自己的一组后代)
有什么我忽略的方法吗?
PS:这是this question的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)
}
你看:用户可以创建TermModels 的树。在每次选择发生后,它应该检查这是否是最后可能的选择。
【问题讨论】:
标签: events scala forwarding zk event-flow