表达式绑定语法合规仍报FormatException,sap.m.Button显隐控制问题
解决SAPUI5表达式绑定中visible属性的FormatException问题
问题分析
你遇到的报错是因为SAPUI5默认会将绑定表达式中引用的单个属性值,自动转换为目标控件属性的类型(visible属性要求布尔值)。当你直接引用${user-management>/alias}这类字符串属性时,UI5会尝试把字符串"TESTUSER"转为布尔值,这显然不符合预期,从而抛出FormatException。
解决方案
在表达式绑定的属性引用后添加, targetType:'any',告诉UI5不要自动转换该属性的类型,保留原始的字符串值,这样就能正常进行相等判断:
<Button xmlns="sap.m" visible="{= ${user-management>/alias, targetType:'any'} === ${recipe-service>Author/alias, targetType:'any'} }" />
如果你更倾向于使用格式化函数的写法,也可以通过复合绑定的方式,给每个绑定部分指定targetType:'any':
<Button xmlns="sap.m"> <visible> <Binding parts="[ {path: '/alias', model: 'user-management', targetType: 'any'}, {path: 'Author/alias', model: 'recipe-service', targetType: 'any'} ]" formatter="function(userAlias, authorAlias) { return userAlias === authorAlias; }" /> </visible> </Button>
原理说明
控制台提示里的targetType:'any'作用是禁用UI5默认的类型转换逻辑,让绑定的属性值以原始类型(这里是字符串)传入表达式或格式化函数,这样两个字符串的相等比较就能正确执行,最终返回布尔值给visible属性,符合控件要求。
内容的提问来源于stack exchange,提问作者babdo
相关产品推荐
相关产品推荐

