You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAP UI5中如何实现点击添加按钮向Fragment表格插入含Fragment的单元格?

实现SAP UI5表格动态添加包含Fragment的行

1. 先准备要嵌入的Fragment

首先创建一个可复用的Fragment(比如命名为ProductFragment.view.xml),定义好单元格内的UI结构,示例如下:

<core:FragmentDefinition xmlns="sap.m" xmlns:core="sap.ui.core">
  <HBox spacing="0.5rem" alignItems="Center">
    <Input placeholder="产品名称" width="8em" />
    <Select width="6em" items="{path: '/productTypes'}">
      <core:Item key="{id}" text="{name}" />
    </Select>
    <Button icon="sap-icon://delete" press="onDeleteRow" tooltip="删除此行" />
  </HBox>
</core:FragmentDefinition>

2. 编写添加行的控制器方法

在视图对应的控制器里,实现addProduct方法,动态创建表格行并把Fragment嵌入进去:

addProduct: function() {
  const oTable = this.getView().byId("table");
  // 创建新的表格行项
  const oNewListItem = new sap.m.ColumnListItem();

  // 创建单元格容器,用来承载Fragment
  const oResultCell = new sap.m.VBox({
    width: "100%"
  });

  // 加载Fragment并添加到单元格中
  this.loadFragment({
    name: "your.app.namespace.fragments.ProductFragment" // 替换成你实际的Fragment命名空间
  }).then(oFragment => {
    oResultCell.addItem(oFragment);
    // 如果表格有多个列,要为每个列创建对应单元格并添加到行项
    oNewListItem.addCell(oResultCell);
    // 把新行添加到表格里
    oTable.addItem(oNewListItem);
  });
}

3. 可选:实现删除行的方法

如果Fragment里有删除按钮,在控制器中补充对应的事件处理逻辑:

onDeleteRow: function(oEvent) {
  // 从点击的按钮向上找到对应的表格行
  const oDeleteBtn = oEvent.getSource();
  const oListItem = oDeleteBtn.getParent().getParent().getParent(); // 根据你的Fragment结构调整层级
  const oTable = this.getView().byId("table");
  // 移除该行
  oTable.removeItem(oListItem);
}

几个关键注意点

  • 命名空间要匹配:Fragment的路径和命名空间必须完全对应,不然会加载失败。
  • 列数要对应:添加的ColumnListItem里的单元格数量,必须和表格的列数保持一致,否则布局会错乱。
  • 事件上下文要正确:加载Fragment时用this.loadFragment(或者指定controller: this),确保Fragment内的按钮事件能被当前控制器处理。
  • 大量行的优化:如果需要频繁添加很多行,建议用模型绑定的方式(绑定到JSON模型数组,新增数据自动渲染行),比手动创建控件更高效。

内容的提问来源于stack exchange,提问作者simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:15:07