【问题标题】:ZK: Listen for all descendants’ eventsZK:监听所有后代的事件
【发布时间】:2011-10-06 18:00:30
【问题描述】:

我目前正在开发一个 ZK 应用程序,但找不到一种方法来侦听从一个特定以下的所有组件触发的所有 SelectEvents(这是一开始就存在的唯一一个,然后得到后代每个选择都发生在它或后代中)。

这个组件下面的层次结构会随着每个SelectEvent而改变,每次发生这种情况时我都需要检查条件。

我能想到的只有

    1. 定义一个函数来执行我需要的条件检查,另外
    2. 向所有调用此函数的子代(没有一个)事件侦听器添加
  1. 在进行条件检查的页面上注册一个事件监听器。比必要时更频繁地触发,但总比不触发要好。

两者都感觉不对,如果存在多个根组件,后者也不安全(因为每个根组件都有自己的一组后代)

有什么我忽略的方法吗?

PS:这是this question的ZK版本。


一些代码。 ExpressionTypeSelector 包含 Listbox 以选择 ExpressionModel。选择时,模型的小部件将替换 ExpressionTypeSelector 的小部件。

主要:

expressionSelector = new ExpressionTypeSelector()
expressionSelector.widget.setParent(layout)

TermModelExpressionModel 的示例)

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


    【解决方案1】:

    除了使用您的第二个选项之外,我认为没有其他容易的方法了。为此可以使用页面级事件侦听器。来自 ZK 文档的参考是 here

    【讨论】:

    • 我的代码在 HtmlMacroComponent 中,所以 1. 我必须以编程方式检索页面(如何?) 2. 如果存在多个这些组件,它将无法工作。 (但我打算让它们成为模态的,无论如何)
    • Tree 组件支持 onSelect 事件,如果选择了任何树项,就会触发该事件。那么如何在该事件处理程序中检查您的状况呢?在这种情况下,无需向后代添加任何事件侦听器。
    • 所以我可以以支持我想做的方式从树组件继承? IE。创建列表框作为节点,在选择时用其他小部件替换自己?并触发树的 onSelect 事件?
    猜你喜欢
    • 2016-12-06
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多