从JSON创建国家/地区列表

从JSON创建国家/地区列表,json,sapui5,Json,Sapui5,我正在尝试创建一个组合框,其中包含SAP UI5中的国家/地区列表 我创建了一个组合框,并创建了一些国家的动态列表,但要创建100多个国家,唯一简单的方法是创建一个国家的JSON文件,然后填充到Controller.js中 我试图创建一个JSON文件,但我不确定是否必须将其存储在model文件夹或根目录下 我必须在XML视图和控制器中进行哪些更改,以及应该将countries.json文件附加到哪里?您看到的是一种称为“聚合绑定”的东西 下面是一个示例,用于说明 如何使用json文件中的数据创

我正在尝试创建一个组合框,其中包含SAP UI5中的国家/地区列表

我创建了一个组合框,并创建了一些国家的动态列表,但要创建100多个国家,唯一简单的方法是创建一个国家的JSON文件,然后填充到Controller.js中

我试图创建一个JSON文件,但我不确定是否必须将其存储在model文件夹或根目录下


我必须在XML视图和控制器中进行哪些更改,以及应该将
countries.json
文件附加到哪里?

您看到的是一种称为“聚合绑定”的东西

下面是一个示例,用于说明

  • 如何使用json文件中的数据创建模型
  • 如何将模型数据绑定到XML视图控件(必须绑定comboBox而不是table)


让我知道这是否有帮助

也许您根本不需要创建
countries.json
文件:)

As UI5在内部利用(CLDR)并通过
sap.ui.core.LocaleData
提供数据,其中包括语言名称、国家名称、货币名称、单数/复数修改等

区域设置数据支持的区域列表以JSON格式存储。在其中一个文件中,如果查看属性
“Territions”
,您将看到国家名称列在其中。您可以筛选出每个不被视为国家的不相关区域,然后将其余区域绑定到组合框的
items
聚合中

演示
sap.ui.getCore().attachInit(()=>sap.ui.require([
“sap/ui/core/Locale”,
“sap/ui/core/LocaleData”,
“sap/ui/model/json/JSONModel”,
“sap/ui/core/mvc/XMLView”,
],函数(Locale、LocaleData、JSONModel、XMLView){
“严格使用”;
XMLView.create({
定义:`
`,
模型:createCountryModel(getCountries()),
})。然后(view=>view.placeAt(“内容”);
函数createCountryModel(国家,sizeLimit=300){
const model=新的JSONModel(国家);
型号:setSizeLimit(sizeLimit);
model.setDefaultBindingMode(“单向”);
收益模型;
}
职能(国家){
const territions=getTerritories();
从(地区,byCustomCheck())返回ExtractCountries;
}
函数getTerritories(localeId){
const currentConfig=sap.ui.getCore().getConfiguration();
const locale=localeId?新语言环境(localeId):currentConfig.getLocale();
const localeData=新的localeData(locale);
返回localeData.getTerritories();//包括国家名称
}
函数extractCountriesFrom(Territions,customCheck=()=>true){
const isValidCountry=createCountryCheck(customCheck);
const toObject=code=>Object.freeze({
代码:代码,
名称:领土[代码],
});
const countryObjects=Object.key(区域)
.filter(isValidCountry)
.地图(toObject);
返回对象。冻结(countryObjects);
}
函数createCountryCheck(customCheck,显然不是Countrys=[
“欧盟”/“欧盟”
“EZ”、/“欧元区”
“联合国”/“联合国”
“ZZ”、/“未知区域”
]) {
返回territoryCode=>territoryCode.length==2
&&!ObsviouslyNotCountries.包括(territoryCode)
&&自定义检查(territoryCode);
}
函数byCustomCheck(){//返回一个返回布尔值的函数
//例如:要排除的受制裁国家列表
常数列表=[
“AF”,
“金伯利进程”,
“IR”,
// ...
];
返回countryCode=>!list.includes(countryCode);
}
}));