Grid bound Store loadData 方法调用触发 ViewModel notify 方法,该方法重新计算整个页面视图模型字段

问题描述 投票:0回答:0

我目前正在将 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

extjs extjs6-classic extjs7-classic
© www.soinside.com 2019 - 2024. All rights reserved.