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

sap.m.List筛选含CheckBox的CustomListItem时复选框选中状态丢失

解决sap.m.List筛选时CheckBox选中状态丢失问题

问题核心原因:你当前的CheckBox选中状态仅保存在控件实例中,当列表执行筛选操作时,列表绑定会重新渲染匹配条件的列表项,原有的CustomListItem会被销毁并重建,控件实例里的选中状态也就跟着丢失了。要彻底解决这个问题,必须把选中状态绑定到数据源的模型字段中,让状态持久化在数据层面。

修改步骤:

  1. 给数据源添加选中状态字段
    确保你的每个列表数据项都包含一个布尔类型的selected字段,初始值设为false,示例如下:

    // 示例数据源结构
    const data = [
      { name: "项目1", selected: false },
      { name: "项目2", selected: false },
      // 其他数据项...
    ];
    
  2. 修改视图中的CheckBox绑定
    把CheckBox的selected属性绑定到模型的selected字段,让选中状态和数据项关联:

    <CustomListItem id="itemList">
      <CheckBox class="sapUiTinyMarginBeginEnd" 
        text="{name}" 
        selected="{selected}" 
        select="onSelectionChange"/>
    </CustomListItem>
    
  3. 更新控制器的选择事件处理逻辑
    在onSelectionChange事件里,同步更新对应数据项的selected字段,确保状态写入模型:

    onSelectionChange(event: sap.ui.base.Event) {
      const checkbox = event.getSource() as sap.m.CheckBox;
      const dataContext = checkbox.getBindingContext();
      if (dataContext) {
        // 将选中状态同步到模型数据
        dataContext.setProperty("selected", checkbox.getSelected());
      }
    }
    
  4. 筛选逻辑保持不变
    你原来的筛选代码不需要修改,现在筛选后重建的CheckBox会自动从模型中读取selected字段的值,选中状态就不会丢失了。

如果不需要额外的事件处理逻辑,也可以直接使用双向绑定简化代码,去掉select事件:

<CheckBox class="sapUiTinyMarginBeginEnd" 
  text="{name}" 
  selected="{path: 'selected', mode: 'TwoWay'}"/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:25:24