ZK 如何处理多个事件?

ZK How to handle multiple events?

我有文本框和监听两个事件的方法。

<textbox id="test" />

@Listen("onOK = #test; onBlur = #test")
public void action(Event event) {
  // do something ...
}

当我在文本框上按 Enter 时,事件 "onOK " 被触发。没关系。 但是当我从 Texbox 失去焦点时,事件 "onBlur" 也会被触发。这很糟糕,因为在那种情况下我的方法 "action" 被调用了两次。 我怎样才能取消第二个活动?

如果不需要文本框失去焦点时触发事件,则需要删除onBlur部分:

@Listen("onOK = #test")
public void action(Event event) {
    // do something ...
}

那是因为在您的代码中,您正在使用注释 @listen 每次在带有 id="test" 的文本框中发生以下任何事件:onOkonBlur(也就是失去焦点时触发的),然后执行方法action

更新

现在,如果您需要文本框用 onOK 触发一个事件,但在失去焦点时触发另一个事件 (onBlur),那么显然您需要两种不同的方法并将 listen两者都有标记,但具有自己的行为和条件,如下所示:

@Listen("onOK = #test")
public void action(Event event) {
    // do something when Ok...
}

@Listen("onBlur = #test")
public void anotherAction(Event event) {
    // do something when loses focus...
}

您可以将任何活动转发到另一个活动:

created a fiddle where you can test it.

但有些解释:
在祖尔:

<textbox id="test" forward="onOK=test.onBlur"/>

什么说onOK会转发给onBlur,后面会是onBlur

在java代码中:

@Listen("onBlur = #test")
public void action(Event event) {
    Clients.showNotification(event.getName() + " " + ++counter);
}

所以现在我们只监听 onBlur,因为 onOK 被转发到 onBlur。

这对你的 atm 案件有帮助吗,还没有。

不调用事件=>不可能,如果你声明它,它就会被触发。
但是你如何处理你的情况:

将字符串保存在您的作曲家中,并用新值检查它。
如果等于 => 事件已经触发,或者没有变化。
如果不相等 => 做你的事。