OData V4 布尔值意外转换为 'No' / 'Yes' 字符串以进行 ODatamodel V4 绑定



通过测试,OData V4服务返回的布尔值在READ和绑定之间的某处被转换为字符串'No'和'Yes'。我不知道是什么原因造成的。

通过$batch请求加载OData来加载建议项:

{
"@odata.context": "$metadata#SkillVocabularyItems",
"value": [
{
"randomId": "622d4068-9928-4446-931a-45b443356dae",
"skill": "MongoDB",
"trending": true
},
{
"randomId": "d9ed304a-c1bc-454c-b4db-970f87ee3943",
"skill": "MongoLab",
"trending": false
}
]
}

我希望能工作的XML绑定

<SearchField
id="searchField"
busy="{view>/loadingSkillSuggestions}"
placeholder="Search for a skill..."
enableSuggestions="true"
suggest=".onSuggestSkills"
suggestionItems="{/SkillVocabularyItems}"
>
<suggestionItems>
<SuggestionItem
icon="{= ${trending}? 'sap-icon://trend-up' : '' }"
text="{skill}"
description="{trending}"
key="{skill}"
/>
</suggestionItems>
</SearchField>

有效的XML绑定,在模型中显示的值实际上是'No'或'Yes'。这个"否"或"是"也可以在建议项的"描述"中看到。


<SearchField
id="searchField"
busy="{view>/loadingSkillSuggestions}"
placeholder="Search for a skill..."
enableSuggestions="true"
suggest=".onSuggestSkills"
suggestionItems="{/SkillVocabularyItems}"
>
<suggestionItems>
<SuggestionItem
icon="{= ${trending}? 'sap-icon://trend-up' : '' }"
text="{skill}"
description="{trending}"
key="{skill}"
/>
</suggestionItems>
</SearchField>

找到描述此行为的文档。

默认情况下,属性绑定提供一个根据其应用于的控件属性的目标类型格式化的值…

来源:Type Determination

解决方案是使用%作为绑定表达式而不是$:

内嵌绑定${binding}根据表达式绑定应用的控件属性的目标类型提供一个格式化的值,例如,"boolean"在<Icon src="sap-icon://message-warning" visible="{= ${status} === 'critical' }">情况下。这可能是不希望的,甚至会导致错误,例如,如果OData V4自动为"状态"添加正确的类型;属性,它是类似字符串的,而不是布尔值。在这种情况下,使用语法%{binding}代替。

来源:Expression Binding

最新更新