我有一个SAPUI5(V1.24)主从细节应用程序,其中我必须显示大约25个静态项目的列表,每个项目在单击时显示静态图像。
我将列表标题存储在i18n文件中,该文件在ResourceBundle
文件中实例化为Component.js
。
现在我想知道是否可以将所有标题存储在StandardListItem
文件夹下的JSON文件中并绑定{{1},而不是在我的Master.xml.view
文件中添加25行mockdata
个对象。我的JSONModel
。但由于我的JSON sap.m.List
中的值只是列表标题,我正在寻找一种方法将i18n文本与JSON绑定。像这样:
"key":"value"
在视图中添加任意数量的列表项感觉不对。如果明天名单从25增加到50怎么办?请帮忙。
感谢。
答案 0 :(得分:1)
在我们的聊天讨论后,我提出了以下解决方案
var aAllKeys = [],
aMasterKeys = [],
oProperties = {},
oJSON = {
items: []
};
// Get the current locale (for example "de-DE")
var sCurrentLocale = sap.ui.getCore().getConfiguration().getLanguage();
// This creates an array of locale fallback solutions.
// For example ["de-DE", "de", "en", ""]
var aFallbacks = jQuery.sap.resources._getFallbackLocales(sCurrentLocale);
// iterate all locales
for (var i = 0; i < aFallbacks.length; ++i) {
var sLocale = aFallbacks[i];
// try to load i18n file for each locale
oProperties = jQuery.sap.properties({
url: "i18n/i18n" + (sLocale ? "_" + sLocale : "") + ".properties"
});
// if the i18n file exists (i. e. contains keys)
if (oProperties.getKeys().length > 0) {
aAllKeys = oProperties.getKeys();
break;
}
}
// find all keys of items to display in master (the prefixed ones)
for (i = 0; i < aAllKeys.length; ++i) {
if (aAllKeys[i].indexOf("MyPrefix.") > -1) {
aMasterKeys.push(aAllKeys[i]);
}
}
// find all values of items to display in master
for (i = 0; i < aMasterKeys.length; ++i) {
oJSON.items.push({
key: aMasterKeys[i],
value: oProperties.getProperty(aMasterKeys[i])
});
}
然后,您可以使用oJSON
创建一个新的JSON模型,该模型可以绑定到您的主列表
编辑:我修改了代码段的开头。如果当前语言环境没有i18n文件,则会添加回退解决方案。这是针对SAPUI5 v1.30进行测试的。
答案 1 :(得分:0)
请参阅我在类似主题中提供的解决方案:How is localized data binding set up with JSON files and XML views?
最好的部分,它只需要一个单行辅助方法: - )