想要在对话框已经显示出来后再执行一些业务逻辑,应该使用哪个视图事件

onReady事件也是在对话框显示之前调用的,想在视图显示之后再执行业务逻辑,应该怎么办?

onReady 是视图发出的最后一个事件了。你需要的是什么应用场景呢?

onReady事件触发时,对话框还没有显示。
我需要在对话框显示之后,自动开始执行业务逻辑(不需要通过点击按钮之类的交互操作),在执行业务逻辑的过程中,需要修改UI组件的显示内容,比如<div id="status"/>,根据业务逻辑执行的顺序,先后显示“正在读取数据”、“正在写入文件”之类的。
其实就是在对话框打开后自动执行业务逻辑,并将执行过程反馈到UI显示中,这个不能在onReady事件中进行,因为此时对话框还没有被显示出来。

你的需求在 beforeShow 或者 onReady 里面做都可以。虽然此时对话框还没有显示,但是已经可以对视图中的 UI 组件做操作了:
image

我需要在业务逻辑执行过程中改变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();
}

这样是可以的,多谢。