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

如何在OpenUI5表达式绑定中用三元运算符切换列表项高亮?

解决sap.m.Table高亮切换的表达式绑定问题

我明白你遇到的困扰了——你的表达式绑定思路是对的,但问题出在关闭高亮时返回的false值不符合highlight属性的要求。UI5的highlight属性接受的是Highlight枚举值(比如"Success"、"Error"),或者undefined/null/空字符串来表示取消高亮,布尔值false并不会被识别为“无高亮”状态。

正确的表达式绑定写法

把返回值改成undefined(或者null/"")就可以正常生效了:

<ColumnListItem highlight="{= ${compareModel>/compare} ? ${dupe} : undefined }">
  <Text text="{myItemText}" />
  <!-- 其他列控件 -->
</ColumnListItem>

为什么原来的写法不生效?

当你返回false时,UI5无法将这个布尔值映射到合法的高亮状态,所以会忽略这个值,导致高亮逻辑失效。而返回undefined时,UI5会明确知道要移除当前行的高亮样式。

额外验证点

  • 确保compareModel在视图中正确注册,模型名称和绑定路径没有拼写错误
  • 确认dupe属性的取值确实是UI5支持的Highlight枚举值(比如"Success"、"Error"、"Warning"等)

完整示例参考

视图部分

<Button text="切换重复项高亮" press=".onToggleHighlight" />
<Table items="{/items}">
  <columns>
    <Column><Text text="项目文本" /></Column>
    <!-- 其他列定义 -->
  </columns>
  <items>
    <ColumnListItem highlight="{= ${compareModel>/compare} ? ${dupe} : undefined }">
      <Text text="{myItemText}" />
      <!-- 其他列内容 -->
    </ColumnListItem>
  </items>
</Table>

控制器部分

onInit: function() {
  // 初始化控制高亮状态的客户端模型
  const compareModel = new sap.ui.model.json.JSONModel({
    compare: true // 默认开启重复项高亮
  });
  this.getView().setModel(compareModel, "compareModel");
},

onToggleHighlight: function() {
  const compareModel = this.getView().getModel("compareModel");
  const currentState = compareModel.getProperty("/compare");
  // 切换高亮状态
  compareModel.setProperty("/compare", !currentState);
}

这样就能实现点击按钮自由切换重复项高亮的功能了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:10:51