tabSheet的懒加载和fragment如何一起使用

目前在tab启用了lazy="true",在xml里,我将fragment放到tab标签后,在控制其中就会提示Component cannot be injected because it is located inside of lazy tab "xxxx.xxx" ,这样的话,我的fragment也就没有办法使用了。然而现在我有6个tab,每个tab中有多个fragment,加起来一共二十多个fragment,这会导致页面打开速度慢,所以想和tabsheet的懒加载一起使用。

你在controller中是不是以注入的方式用到了 lazy tab 里面的组件?

对的,是这样的

这样不行的:

当视图打开时,延迟加载标签页内的组件还不存在,因此无法注入到控制器,也无法在视图生命周期事件方法中获取。只有在用户打开标签页后,才能访问这些组件。通过 SelectedChangeEvent 事件的处理方法可以检测用户选择了哪个标签页,然后使用 UiComponentUtils.getComponent() 方法获取需要的组件。

文档:tabSheet 标签面板 :: Jmix 文档

所以这个问题可能跟fragment没有关系,只是获取组件出错。

2 个赞

好的,我试一下

我试过用UiComponentUtils.getComponent()获取fragment了,可以获取到,但是获取到的fragment内的组件依旧为null,我是需要一个一个去获取吗?
image