SAPUI5可复用Table Fragment XML数据绑定方案咨询
解决方案
你选择Fragment实现该复用场景的思路完全可行,问题出在属性名误用和绑定路径配置错误,纯XML无JS的实现方式如下:
1. 修改可复用Fragment的绑定配置
把Fragment内Table的items绑定指向当前具名模型的上下文根即可,内部字段的相对路径不需要调整:
<core:FragmentDefinition xmlns="sap.m" xmlns:core="sap.ui.core"> <!-- 绑定当前dataModel上下文指向的数组 --> <Table items="{dataModel>}"> <columns> <Column> <Text text="Name"/> </Column> <Column> <Text text="Amount"/> </Column> </columns> <items> <ColumnListItem> <cells> <ObjectIdentifier title="{dataModel>name}"/> <Text text="{dataModel>amount}"/> </cells> </ColumnListItem> </items> </Table> </core:FragmentDefinition>
2. 修改视图中Fragment的调用方式
你之前写的objectBindings不是框架支持的合法属性,要给Fragment传递绑定上下文,需要用core:bind-context属性指定路径。
UI5 1.87及以上版本(直接绑定,无额外容器)
1.87版本后Fragment原生支持直接设置绑定上下文,不需要外层嵌套容器:
<!-- 渲染/data/a数组对应表格 --> <core:Fragment type="XML" fragmentName="your.project.namespace.view.ReusableTable" core:bind-context="{dataModel>/data/a}" /> <!-- 渲染/data/b数组对应表格 --> <core:Fragment type="XML" fragmentName="your.project.namespace.view.ReusableTable" core:bind-context="{dataModel>/data/b}" />
低版本兼容写法
如果项目使用的UI5版本低于1.87,可以在外层套一个轻量容器传递绑定上下文,依然不需要任何JS代码:
<VBox core:bind-context="{dataModel>/data/a}"> <core:Fragment type="XML" fragmentName="your.project.namespace.view.ReusableTable"/> </VBox> <VBox core:bind-context="{dataModel>/data/b}"> <core:Fragment type="XML" fragmentName="your.project.namespace.view.ReusableTable"/> </VBox>
问题原因说明
- 自定义的
objectBindings属性不会被SAPUI5框架解析,自然无法传递绑定路径 - Fragment本身会继承外层设置的绑定上下文,只要把Table的items绑定指向当前上下文的根节点,就能自动读取传入的数组数据,内部行项目的相对路径绑定会自动对应数组项的属性,不需要额外调整。
该实现完全符合你纯XML配置、无控制器JS代码的要求,Fragment对于这类无独立复杂逻辑的控件组合复用场景,确实比自定义控件、独立组件更轻量高效,选型没有问题。如果后续需要扩展表格的列配置、事件处理,也可以通过Fragment参数传递的方式继续保持纯XML配置的实现方式。
内容的提问来源于stack exchange,提问作者Manuel Braun
相关产品推荐
相关产品推荐

