想象一下,我有两个页面具有完全相同的布局,除了总是来自不同模型的数据。
使用Javascript视图,我可以使用UI5提供的OO机制编写类似的东西:
+---------------------------------------------------+
| CarsView |
+---------------------------------------------------+
| - defines the page structure |
| - contains no concrete model or uses dummy model |
+-----^-----------------------------------^---------+
| |
| |
| |
| |
+-------------+----------------+ +-------------+--------------+
| SportsCarView | | SUVview |
+------------------------------+ +----------------------------+
| - inherits from "CarsView" | | - inherits from "CarsView" |
| - uses "sportscar" model | | - uses "suv" model |
+------------------------------+ +----------------------------+
SportCarView 和 SUVview 实际上已在应用程序中使用并显示, CarsView 从不直接使用。所以实际上它是一个抽象类。
这一切都很好并且可以理解,但我如何使用XML视图执行相同(或类似的操作)?
我所知道的唯一合成方法是XML片段,它允许我在其他XML视图中重用XML视图的片段。但这不是我所追求的。
有什么想法吗?
答案 0 :(得分:2)
当您应用XMLViews时,我想我会让控制器来处理模型选择。这也是我认为这种逻辑应该发生的地方(MVC)。
E.g:
this.setModel(
this.getComponent().getModel(
car === "SUV" ? "SUVModel" : "SportsCarModel"
));
除此之外,您确实可以应用不同的片段(如您所述)或使用可见和类属性以及绑定表达式来使视图看起来略有不同,例如:
<Text text="{SuvProperty}" visible={viewModel>/IsSuv} />
或:
<Text text="{= ${viewModel>/IsSuv} ? ${SuvProperty} : ${SportcarProperty} }" />
特别提醒一句。使用visible属性时。如果你让应用程序构建100个字段并隐藏其中的80个字段,你可能会理解它对性能非常不利。