想知道在SAPUI5中存储URI的最佳做法是什么。猜测它不建议只将它们放在视图或控制器中。想和i18n一起去。或者创建一个viewmodel。或者创建一个新的.json文件。如果最佳做法是为它创建一个.json模型,那么下一个问题就是将.json文件放在SAPUI5项目的标准文件夹结构中。任何建议都是受欢迎的。
答案 0 :(得分:2)
SAPUI5基于Asynchronous Module Definition,因此我们可以简单地创建一个包含所有常量的模块定义,就像在其他支架(例如CRA和angular-cli)中看到的相似模式一样。
因此,我们可以在Constants.js
文件夹中创建一个名为webapp
的文件,然后添加URL和其他常量,如下所示:
// webapp/Constants.js
sap.ui.define([],
function() {
'use strict';
var constants = {
BASE_URL: 'http://localhost:8080',
SOME_API_PATH: '/api/some',
REQUEST_HEADERS: {
'X-XSRF-TOKEN': 'something-else'
},
ANOTHER_CONSTANT: 'something'
};
return constants;
});
然后,我们可以将常量添加到依赖项数组中,以导入所需的常量:
// SomeController.js
sap.ui.define([
'<PROJECT_NAME>/Constants'
], function(Constants) {
console.info(Constants.BASE_URL);
});
.env
文件也可以作为基于环境的常量的选项,但是,这超出了我认为的问题范围。
答案 1 :(得分:0)
当前,我使用本地sap.ui.model.json.JSONModel
存储静态URL。
文件夹结构
webapp
--controller
--i18n
--localService
--model
--test
--util // into the util folder goes the url.json
----url.json
--view
url.json
[{
"my_url_name": "my_url"
},
{
"my_other_url_name": "my_other_url"
}]
View.controller.js
...
onInit: function(oEvent) {
...
// set model to view
var sPath = jQuery.sap.getModulePath("myAppNameSpace.util", "/url.json");
var oModel = new JSONModel(sPath);
this.getView().setModel(oModel, "url");
// use model
var sMyUrl = this.getView().getModel("url").getProperty("/my_url_name");
...
}
...