在 UI5 演示套件中,演练步骤 8(仍然)提到了以下内容:
为了安全起见,我们必须使用与控制器中类似的机制来使用资源包中的字符串并替换其中的一部分。这可以通过
jQuery.sap.formatMessage格式化程序来完成。
它可用于 XML 视图中带有占位符的可翻译文本,例如:
<Title text="{
parts: [
'i18n>overflowToolbarTitle',
'appView>/listItemCount'
],
formatter: 'jQuery.sap.formatMessage'
}" />
Run Code Online (Sandbox Code Playgroud)
但是,自 1.58 起jQuery.sap.formatMessage 已折旧,如果我改为使用建议的替代方案sap.base.strings.formatMessage,则会引发以下错误:
未找到格式化程序函数 sap.base.strings.formatMessage!
如何formatMessage在 XML 中使用新模块?
使用,现在可以在 XML 视图中声明性地要求模块:commit:2dab48e
<Title xmlns="sap.m" xmlns:core="sap.ui.core"
core:require="{ formatMessage: 'sap/base/strings/formatMessage' }"
text="{
parts: [
'i18n>overflowToolbarTitle',
'appView>/listItemCount'
],
formatter: 'formatMessage'
}"
/>
Run Code Online (Sandbox Code Playgroud)
有了这个,我们可以避免依赖中间控制器并独立使用新模块。
UI5 当前不允许获取模块并将其分配给formatter. 1此外,新功能模块永远不会以名称 导出sap.base.strings.formatMessage。源文件
另一种方法是指向控制器中分配的方法,而该方法指向所需的formatMessage模块。
<Title text="{
parts: [
'i18n>overflowToolbarTitle',
'appView>/listItemCount'
],
formatter: '.formatMessage'
}"/>
Run Code Online (Sandbox Code Playgroud)
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/base/strings/formatMessage",
// ...
], function(Controller, formatMessage/*, ...*/) {
"use strict";
return Controller.extend("...", {
formatMessage: formatMessage,
// ...
});
})
Run Code Online (Sandbox Code Playgroud)
我可以想象 UI5 支持在更高版本的绑定定义中获取和分配模块,但在撰写本文时这是不可能的。
1相关增强请求:https : //github.com/SAP/openui5/issues/2475