onReady事件也是在对话框显示之前调用的,想在视图显示之后再执行业务逻辑,应该怎么办?
onReady 是视图发出的最后一个事件了。你需要的是什么应用场景呢?
onReady事件触发时,对话框还没有显示。
我需要在对话框显示之后,自动开始执行业务逻辑(不需要通过点击按钮之类的交互操作),在执行业务逻辑的过程中,需要修改UI组件的显示内容,比如<div id="status"/>
,根据业务逻辑执行的顺序,先后显示“正在读取数据”、“正在写入文件”之类的。
其实就是在对话框打开后自动执行业务逻辑,并将执行过程反馈到UI显示中,这个不能在onReady事件中进行,因为此时对话框还没有被显示出来。
你的需求在 beforeShow 或者 onReady 里面做都可以。虽然此时对话框还没有显示,但是已经可以对视图中的 UI 组件做操作了:
我需要在业务逻辑执行过程中改变UI组件显示的内容,比如:
status.setText("正在加载数据");
loadData();
status.setText(“正在导出数据”);
dataExport();
在onReady事件中写这样的逻辑,最后只会显示“正在导出数据”
哦。你这个情况是因为 onReady 单线程执行,所以会将你写到的所有方法都执行完,最后肯定显示“导出数据”。而且比较耗时的 loadData()
会阻塞 UI 显示。
这里推荐使用异步任务处理:
@Autowired
private UiAsyncTasks uiAsyncTasks;
@Subscribe
public void onReady(final ReadyEvent event) {
status.setText("正在加载数据");
loadDataAsync();
}
private void loadDataAsync() {
uiAsyncTasks.runnableConfigurer(this::loadData)
.withResultHandler(() -> {
status.setText(“正在导出数据”);
dataExport();
})
.runAsync();
}
这样是可以的,多谢。