我正在使用Ext JS框架。我们有一个相当复杂的ViewModel,其中有许多公式绑定到其他公式。我希望只有在ViewModel完成其触发事件的长串事件后才能运行一些代码。我试图验证,在所有ViewModel公式计算完毕后,数据模型是否与API返回的计算字段的预期值保持一致——基本上是延迟的model.isDirty()
检查。
我曾尝试使用setTimeout将我的事件添加到事件队列的末尾,但它有时会在公式更新级联的中间触发。我可以简单地设置一个更长的超时时间,但这会让用户感觉很糊涂,会迫使用户等待更长的时间,而且不能保证在一个特别慢的浏览器上工作。
有没有一种好的方法可以在ViewModel完成计算后立即运行代码,而不是很快?
是否有方法检查ViewModel是否已完成?
有没有一种方法可以像setTimeout一样延迟事件,但只能在事件队列完全清空后运行?
2条答案
按热度按时间im9ewurl1#
我已经解决了我自己的问题。
在Ext JS 7.3.1版中,您可以检查ViewModel的Scheduler的
scheduledCount
成员,以确定是否有任何ViewModel公式正在等待运行。如果该值为零,则可以确保ViewModel已完成计算。我找不到该框架支持的功能来执行此操作。根据sencha docs,“[Scheduler]是框架内部使用的私有实用程序类。不要依赖于它的存在。”如果您正在使用其他Ext JS版本,您可能需要找到类似但不同的解决方案。
qyswt5oh2#
在控制器内部,您可以使用:
!!小心:如果绑定为空,则绑定公式将不会运行。