【问题标题】:Aggregation in SAP UI5SAP UI5 中的聚合
【发布时间】:2017-06-03 06:41:23
【问题描述】:

谁能解释一下聚合在 SAP UI5 中的确切含义? 我正在尝试制作一个具有两个视图的应用程序,并且我想从一个视图导航到另一个视图,反之亦然。 所以,APP控件有聚合,所以我很困惑什么是聚合?

【问题讨论】:

    标签: sapui5


    【解决方案1】:

    这个问题对 SO 来说有点太宽泛了,你之前并没有真正调查过,例如阅读文档。因此投反对票。

    不过,我会将您链接到适当的 documentation page 并提供简短的摘录和说明:

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

    简而言之,UI5 中的聚合与典型的OOP aggregation 的含义大致相同:它们表示has-a,或者相反地表示控件之间的is-a-part-of 关系。表格有行,行有单元格等等。相关控件的生命周期是绑定的(当父级被销毁时,子级也被销毁)。

    严格查看聚合时,UI5 应用程序由控件树组成,其中一个级别的控件是上一级控件聚合的一部分。

    每个聚合都有自己的语义。例如,sa.m.Tableitems 显示在headerfooter 之间,NavContainerpages 一次显示一个。聚合内容的行为一般在 SDK 参考中有所描述。

    【讨论】:

    • "在聚合中,子控件归父控件所有,与父控件一起销毁。" ...我认为 UI5 将 composition 的概念与 aggregation 混合在一起。两种资源,你mentionedWikipedia 都说相反:“聚合(...)并不意味着所有权。”。 UI5 应该使用术语 composition 而不是 aggregation。你怎么看?
    • 我认为它有点复杂,但这实际上取决于您使用的语义。在我看来,在组合关系中,孩子不能没有父母而存在。在 UI5 中,您实际上可以从 Toolbar 的内容聚合中删除一个 Button 并将其放置在其他位置。此外,Button 可以单独存在并具有自己的身份,而不管其父级如何。另一方面,当父控件被销毁时,它的子控件也被销毁,因此它们的生命周期是绑定的。 IMO 在 UI5 中“聚合”的概念实际上是经典“聚合”和“组合”的混合体。
    • 很好的见解。 :) 尤其是最后一句话。作为一个如此庞大的框架,我想要找到一个与这个概念完全吻合的合适的词并不容易。
    【解决方案2】:

    来自Glossary的«聚合»的基本定义:

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

    例如,list 可能有 0 个或多个项目。一个项目有 0 或 1 个列表作为其父项。因此,列表具有«items»的聚合


    在我们的例子中,从 sap.m.NavContainer 扩展而来的控件 sap.m.App 有一个名为 «pages» 的默认聚合,我们可以在其中定义从 sap.ui.core.Control 扩展的任何内容的集合作为其子控件。

    页面:sap.ui.core.Control [ ]

    但是仅仅手动将视图添加到<pages></pages> 是一种反模式,因为视图中通常有一个Page,并且单个页面占据了 100% 的高度,这会将其他视图推开。除此之外,它还使实现导航变得更加困难。

    目前的最佳实践是使用所谓的«router»,通常在应用程序描述符 (manifest.json) 中与其他导航属性一起定义。它的姊妹控件Target takes care 将导航视图添加到«pages»聚合。要了解如何使用路由器实现导航,请查看以下资源:

    【讨论】:

      猜你喜欢
      • 2019-10-11
      • 2019-03-06
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      相关资源
      最近更新 更多