我目前正在将 ExtJs 应用程序从 6.6.0 经典版升级到 7.6.0 经典版。
我遇到了一些奇怪的错误,归结为这样一个事实,即现在网格绑定的本地存储 loadData 方法触发了网格 ViewModel 的通知方法,并触发了父面板中视图模型的评估,正因为如此,那里是一些意想不到的副作用。这在版本 6.6.0 中没有发生。
这里有更多详情:
我在表单上使用了一个网格组件。网格被定义为它自己的类,带有视图模型和视图控制器。绑定到网格的商店在视图模型中被定义为本地商店。网格中的数据通过方法调用加载,最终调用本地存储 loadData。
事实证明,此调用导致以下调用堆栈:
这里是fireItemMutationEvent的代码:
不幸的是,网格 ViewModel 通知调用最终调用了包含网格的父面板中的所有其他绑定。
fireItemMutationEvent 由Ext.view.AbstractView clearViewEl 方法调用(在有源代码的页面中找到
clearViewEl: fun
)。
根据文档,视图模型具有分层逻辑结构:https://docs.sencha.com/extjs/7.6.0/guides/application_architecture/view_model_internals.html,然而,在视图模型上调用通知subcomponent 我认为它只会重新计算该视图模型(及以下)中的绑定,而不是整个层次结构中的绑定!当然,我可能是错的 - 这样做可能有一些我无法理解的原因。
关于如何避免这种情况的任何想法?
我在 windows 2016 上使用 chrome,版本 110.0.5481.178(官方构建)(64 位)。
TIA