我真的不知道下面的属性controlAggregation用于路由SAPUI5应用程序。 没有带有该ID的元素。我无法在此处找到的演示应用中找到对“页面”的任何引用:SAPUI5 routing demo
"routing": {
"config": {
"routerClass": "sap.m.routing.Router",
"viewType": "XML",
"viewPath": "sap.ui.demo.nav.view",
"controlId": "app",
"controlAggregation": "pages", // what does this do?
"transition": "slide",
"bypassed": {
"target": "notFound"
}
视图定义如下 - 未提及'pages'
<mvc:View
controllerName="sap.ui.demo.nav.controller.App"
xmlns="sap.m"
xmlns:mvc="sap.ui.core.mvc"
displayBlock="true">
<App id="app"/>
</mvc:View>
并且
<mvc:View
controllerName="sap.ui.demo.nav.controller.Home"
xmlns="sap.m"
xmlns:mvc="sap.ui.core.mvc">
<Page title="{i18n>homePageTitle}" class="sapUiResponsiveContentPadding">
<content>
<Button id="displayNotFoundBtn" text="{i18n>DisplayNotFound}" press="onDisplayNotFound" class="sapUiTinyMarginEnd"/>
</content>
</Page>
</mvc:View>
答案 0 :(得分:8)
controlAggregation是添加视图的目标聚合。
就像在这种情况下,target是一个sap.m.App,其id为 app 。
app有一个名为 pages 的聚合。
有关详细信息,请参阅routing configuration。
更新细节:
假设controlId是您的页面容器,容器的内容将针对每个不同的路由进行更改。
此处容器的内容只不过是app的页面聚合。
因此,当您导航到category/{id}
时,sapui5会在路径中找出该模式的目标。这是category
。
接下来,它会在viewName
对象中找到此目标的targets
(此处为类别)(请参阅routes数组之后的目标对象包含catagory,products ...)。
所以SapUI5得到了渲染的视图。但是在哪里渲染这个观点?
答案是 - 它会找到为该viewName提到的controlAggregation(内部类别)。在这个例子中,它被称为masterPages
。现在它会找到controlId
中config
的内容。它是splitApp
。所以最后它了解了所有必需的信息。即:
viewName : Category
,controlId(the container of view) : splitApp
controlAggregation : masterPage
现在,sapui5将在Category
的{{1}}聚合内呈现masterPage
视图。
但是注意---- **在你的情况下,如果splitApp
对象中没有提到controlAggegation,则会在targets
中提及它。这意味着对于所有视图,都有一个共同的controlAggregation,即页面。
因此,在这种情况下,sapui5会在config
的{{1}}聚合内呈现您的观点。
我认为你现在了解这一流程。