SAP UI5中的聚合

3

有人能解释一下SAP UI5中的聚合(Aggregation)是什么吗? 我正在尝试创建一个具有两个视图的应用程序,并且希望从一个视图导航到另一个视图,反之亦然。 因此,APP控件具有聚合,所以我对聚合感到困惑。

2个回答

4

这个问题对于Stack Overflow来说稍微有些宽泛,而你在提问之前似乎没有进行过调查,例如阅读文档。因此被投了反对票。

尽管如此,我会链接适当的文档页面,并提供简短的摘录和说明:

控件可以聚合其他控件。这些具有聚合功能的控件充当容器或布局控件,应用程序可以向其添加子控件。如果控件本身添加子控件并重用可用组件,则它们也可以作为复合控件。在聚合中,子控件归父控件所有,并与父控件一起销毁。控件只能有一个聚合父级。将控件添加到另一个聚合中会将其从先前的父控件中删除。

简而言之,在UI5中,聚合与典型的OOP aggregation大多具有相同的含义:它们表示控件之间的has-a或反过来的is-a-part-of关系。表格有行,行有单元格等等。相关控件的生命周期是绑定的(当父级被销毁时,子级也会被销毁)。
严格看聚合时,UI5应用程序由一组控件树组成,其中一个级别的控件是上一级控件聚合的一部分。
每个聚合都有其自己的语义。例如,sa.m.Tableitemsheaderfooter之间显示,NavContainerpages逐个显示。聚合内容的行为通常在SDK参考中描述。

在聚合中,子控件归父控件所有,并且随着父控件一起销毁。我认为UI5将组合的概念与聚合混淆了。您提到的资源以及维基百科都表示相反的意思:“聚合()不意味着所有权。”。UI5应该使用组合而不是聚合这个术语。你怎么想? - undefined
1
我认为这个问题有点复杂,但实际上取决于你使用的语义。在我看来,在组合关系中,子对象不能没有父对象而存在。在UI5中,你可以从工具栏的内容聚合中移除一个按钮,并将其放置在其他地方。此外,一个按钮可以独立存在并拥有自己的身份,与其父对象无关。另一方面,当父控件被销毁时,它的子对象也会被销毁,因此它们的生命周期是绑定在一起的。在我看来,在UI5中,“聚合”这个概念实际上是经典“聚合”和“组合”的混合体。 - undefined
1
很好的见解。:) 特别是最后一句话。作为如此庞大的框架,我想很难找到一个恰当的词来精确地描述概念。 - undefined

2
术语表中的基本定义可以看出,「aggregation」的含义是:

聚合(在 UI5 上下文中)是两种 UI 元素类型之间的特殊关系。它用于定义父子关系。聚合的父端具有 基数 0..1,而子端可以具有 0..10..*

例如,列表可以有 0 个或多个项。一个项有 0 个或 1 个列表作为其父元素。因此,列表具有「items」的聚合
在我们的情况下,控件 sap.m.App 是从 sap.m.NavContainer 扩展而来的,它有一个名为“pages”的默认聚合,我们可以将任何从 sap.ui.core.Control 扩展的内容定义为其子控件的集合。

pages: sap.ui.core.Control [ ]

但是,仅手动将视图添加到 <pages></pages> 中是一种反模式,因为视图通常包含一个 Page,一个单独的页面占据了整个高度,将其他视图推开。此外,这样做会使导航实现更加困难。
相反,当前最佳实践是使用所谓的“路由器”,通常在应用程序描述符(manifest.json)中与其他导航属性一起定义。它的姐妹控件Target负责将导航视图添加到“pages”聚合中。要了解如何使用路由器进行导航,请查看以下资源:
例子:基本导航, 静态父控件内的导航 Walkthrough中的«路由和导航»(另请参阅进一步步骤) 从Essentials的«路由和导航»了解基本概念。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接