java - 如何多次将事件从组件发送到其父级?
问题描述
我正在建立我之前发布的问题:
我有一个带有一些复选框的 vbox,这些复选框是由整个窗口的视图模型动态添加的。viewmodel 为复选框的 onCheck 事件注册一个监听器,如下所示:
if (childName.equals("org.zkoss.zul.Checkbox")) {
child.addEventListener(1000,"onCheck", new EventListener<Event>() {
@Override
public void onEvent(Event event) throws Exception {
Events.postEvent(1000,"onSelectionChange",parent,null);
}
});
}
onSelectionChange 事件在父 vbox 中被捕获,如下所示:
<vbox onSelectionChange="@command('onChange', component=self, finishButton=finish)"/>
整个 vbox 组件是允许在其页面之间来回切换的向导的一部分。vbox 组件因此可以显示多次。第一次,onSelectionChange 事件被 vbox 组件正确触发和捕获。因此,正确调用了 onChange。但是,第二次加载组件时,复选框会触发该事件,但不会被 vbox 捕获。
我已经尝试过 postEvent 和 sendEvent。在任何情况下,该事件都不会正确转发到父 vbox。有谁知道为什么会这样?
谢谢你的帮助!
解决方案
我准备了一个可运行的示例(基于我从您的描述中理解的内容),它有效...... http://zkfiddle.org/sample/51j1be/1-wizard-checkboxes-custom-events
也许这有助于作为您场景的模板。如果不是,您可以调整并保存它以显示您的问题。所以我可以再看看。
推荐阅读
- javascript - 如何保存函数的输入值?
- javascript - 如何在电子应用程序中本地保存图像
- visual-studio - Visual Studio 对话框:您正在重命名脚本文件
- angular - 嵌入在 Angular 6 组件中的 iframe 中 Rocketchat 用户的自动登录
- excel - 删除 TEXTJOIN 和 IF 函数中的重复值
- c++ - 在两个 lambda 之间共享对象
- html - 如何在 Angular 7 上有一些延迟显示点击表单?
- ruby-on-rails - ActionController::UnknownFormat 在 CommentsController#index
- multithreading - GUI中的tIdHttp内部线程和IdTCPServer
- sql - 如何使用由日期时间值组成的 PIVOT 表