如何等待所有ViewModel公式在ExtJS中完成更改?

ev7lccsx  于 2022-09-26  发布在  其他
关注(0)|答案(2)|浏览(189)

我正在使用Ext JS框架。我们有一个相当复杂的ViewModel,其中有许多公式绑定到其他公式。我希望只有在ViewModel完成其触发事件的长串事件后才能运行一些代码。我试图验证,在所有ViewModel公式计算完毕后,数据模型是否与API返回的计算字段的预期值保持一致——基本上是延迟的model.isDirty()检查。
我曾尝试使用setTimeout将我的事件添加到事件队列的末尾,但它有时会在公式更新级联的中间触发。我可以简单地设置一个更长的超时时间,但这会让用户感觉很糊涂,会迫使用户等待更长的时间,而且不能保证在一个特别慢的浏览器上工作。
有没有一种好的方法可以在ViewModel完成计算后立即运行代码,而不是很快?
是否有方法检查ViewModel是否已完成?
有没有一种方法可以像setTimeout一样延迟事件,但只能在事件队列完全清空后运行?

im9ewurl

im9ewurl1#

我已经解决了我自己的问题。
在Ext JS 7.3.1版中,您可以检查ViewModel的Scheduler的scheduledCount成员,以确定是否有任何ViewModel公式正在等待运行。如果该值为零,则可以确保ViewModel已完成计算。

const scheduler = this.getViewModel().getScheduler();

setTimeout(awaitViewModelFinished, 0);
function awaitViewModelFinished() {
    if (scheduler.scheduledCount > 0) {
        setTimeout(awaitViewModelFinished, 0);
        return;
    }

    // Payload code goes here.
}

我找不到该框架支持的功能来执行此操作。根据sencha docs,“[Scheduler]是框架内部使用的私有实用程序类。不要依赖于它的存在。”如果您正在使用其他Ext JS版本,您可能需要找到类似但不同的解决方案。

qyswt5oh

qyswt5oh2#

在控制器内部,您可以使用:

// come viewModel options might not be resolved

this.getViewModel().notify();

// all viewModel options are solved

!!小心:如果绑定为空,则绑定公式将不会运行。

相关问题