1. 什么是Application Namespace?
在SAPUI5中,Application Namespace是一个唯一的标识符,用于区分不同的应用程序和组件。它是一个字符串,通常是公司的网址的反向版本,例如com.sap.myapp。这样可以确保在全球范围内的唯一性,避免了命名冲突。
一个应用程序的namespace定义在manifest.json
文件中的sap.app
部分的id
字段。例如:
{
"sap.app": {
"id": "com.sap.myapp",
...
},
...
}
2. 命名空间的主要作用
Namespace的主要作用是:
-
避免命名冲突:由于每个应用程序都有自己的唯一namespace,因此可以避免在全局范围内的命名冲突。
-
组织代码:Namespace可以帮助我们更好地组织代码,使代码结构更清晰。例如,我们可以按照namespace将代码分为不同的模块或组件。
-
资源加载:SAPUI5使用namespace来确定从哪里加载资源(例如,视图,控制器,国际化文件等)。例如,如果一个视图的名称是
com.sap.myapp.view.MyView
,SAPUI5就会去com/sap/myapp/view/MyView.view.xml
这个路径下加载对应的视图文件。
3. 定义和使用Namespace
结合我前面引导过程文章中的示例程序,让我们具体解释下如何定义和使用namespace。
注意:组成命名空间的元素要以
.
进行分割。
首先,我们可以看在manifest.json文件中,我们定义了此应用程序的命名空间文zsapui5.test。
{
"_version": "1.58.0",
"sap.app": {
"id": "zsapui5.test"
}
}
SAPUI5应用程序运行时,会使用资源路径的配置去请求相关的资源文件。默认情况下,资源路径会执行SAPUI5框架的文件夹。但要知道,我们的应用程序并不在框架的文件夹下,因而,我们必须要在配置中指明如何让SAPUI5的运行时环境(runtime)找到我们的应用程序。
我们可以在SAPUI5的引导过程完成这个配置。
让我们在回顾下,我们刚刚是如何配置的引导过程,打开index.html
文件。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>My SAPUI5 Test</title>
<script
id="sap-ui-bootstrap"
src="https://sdk.openui5.org/resources/sap-ui-core.js"
data-sap-ui-theme="sap_horizon"
data-sap-ui-libs="sap.m"
data-sap-ui-compatVersion="edge"
data-sap-ui-async="true"
data-sap-ui-onInit="module:zsapui5/test/index"
data-sap-ui-resourceroots='{
"zsapui5.test": "./"
}'>
</script>
</head>
<body>
<div>Hello World!</div>
</body>
</html>
属性 data-sap-ui-resourceroots
需要一个包含命名空间的对象( 物理位置映射)。在此,我们指定了此应用程序的命名空间zsapui5.test
, 通过"zsapui5.test": "./"
这样的配置,我们告诉SAPUI5内核,zsapui5.test
命名空间中的资源位于与index.html
相同的文件夹中。
在这个例子中,所有针对 zsapui5.test 这个应用程序的请求都会被重定向到引导程序定义的文件路径,也即zsapui5/test/这个路径下。
文件路径可以是相对于引导程序定义的文件的相对路径或绝对路径。
如下例,如果应用程序需要一个文件,例如 zsapui5.test.controller.MyController,SAPUI5框架则会在命名空间zsapui5/test/controller这个文件夹中去查找MyController文件。
<!-- zsapui5/test/view/MyView.view.xml -->
<mvc:View
controllerName="zsapui5.test.controller.MyController"
xmlns:mvc="sap.ui.core.mvc"
displayBlock="true"
>
...
</mvc:View>
// zsapui5/test/controller/MyController.js
sap.ui.define([
"sap/ui/core/mvc/Controller"
], function(Controller) {
"use strict";
return Controller.extend("zsapui5.test.controller.MyController", {
...
});
});
当路径解析时,
zsapui5.test.controller.MyController
会被解析成zsapui5/test/controller/MyController
。
3. 小结
本文介绍了SAPUI5应用程序命名空间的概念,命名空间定义在manifest.json文件中的sap.app
部分的id
字段,通过在SAPUI5程序的引导过程中,指定应用程序的命名空间,可以让SAPUI5框架正确找到我们的应用程序对应的资源。希望本文对你有帮助!