<semantic:DetailPage title="Detail Page Title">
<mvc:XMLView viewName="query.sap.view.Table" />
<mvc:XMLView viewName="query.sap.view.chart" />
</semantic:DetailPage>
我在同一内容中有两个嵌套视图,我只想显示其中之一。当我按下一个按钮时,它应该切换到另一个按钮。
为了仅使其中一个控件可见(在我们的例子中,子控件之一View
s),人们可能会想先实例化所有控件,然后使用visible
属性来隐藏其他“不需要的”控件。但请记住,这种方法可能会导致性能和内存问题取决于复杂性和元素的数量。根据链接的文档主题:
不要使用可见性进行惰性实例化
当应用程序具有最初不可见的区域,或者一次只有多个选项之一可见时,请执行以下操作:not创建所有 UI 控件并将其中大部分设置为不可见!如果这样做,OpenUI5 将实例化并初始化所有这些控件,这会消耗不必要的时间和内存,即使它们未渲染也是如此。除此之外,数据绑定也会被初始化,这可能会触发现阶段不需要的后端请求。当 UI 中最初不可见的部分非常复杂或数量众多时,影响尤其大。
幸运的是,UI5已经内置了延迟加载功能。
按需切换视图
Via NavContainer
+ Router
配置targets内的财产应用程序描述符文件(manifest.json)相应地如下所示:https://embed.plnkr.co/HRSJ44/
为此,我们需要子视图的目标对象的三个属性:
-
parent
:指向定义父视图的父目标名称
-
controlId
:应附加子视图的控件的 ID。
在上面的 Plunker 示例中,控件是NavContainer它还提供滑动动画作为奖励。动画可以通过以下命令关闭transition: "show"
.
-
controlAggregation
:就我们而言"pages"
(NavContainer 的默认聚合)。
定义完这三个属性后,我们可以显示目标视图而不更改哈希值,或通过调用导航到子视图component.getRouter().navTo("thatChildRouteName");
。无论哪种方式,子视图都会被延迟创建,并且我们有一种灵活的方式来切换不同的子视图。
![UI5 lazy loading on a button press](https://i.stack.imgur.com/HLmUN.gif)
通过“块”(sap.uxap.BlockBase
)
视图可以延迟加载并切换sap.uxap.BlockBase
See:
- 例子:https://embed.plnkr.co/9ZVwpP/
- Docs:
- 创建块
- 对象页块
- API参考:sap/uxap/BlockBase
虽然块通常与sap.uxap.ObjectPageLayout
(OPL),它们也可以独立于自由式应用程序中的 OPL 设计使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)