什么是在SAPUI5中存储绝对URI的最佳实践?

时间:2017-06-20 17:36:34

标签: sapui5

想知道在SAPUI5中存储URI的最佳做法是什么。猜测它不建议只将它们放在视图或控制器中。想和i18n一起去。或者创建一个viewmodel。或者创建一个新的.json文件。如果最佳做法是为它创建一个.json模型,那么下一个问题就是将.json文件放在SAPUI5项目的标准文件夹结构中。任何建议都是受欢迎的。

2 个答案:

答案 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");

  ...
}
...