如何在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
相关产品推荐
相关产品推荐

