SAP UI5 应用 index.html 里 data-sap-ui-resourceroots 指令的含义和作用

举报
汪子熙 发表于 2022/06/11 17:59:16 2022/06/11
【摘要】 如下图所示:<script id="sap-ui-bootstrap" src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js" data-sap-ui-theme="sap_bluecrystal" data-sap-ui-libs="sap.m, sap.ui.comp" data-sap-ui-bindingSynt...

如下图所示:

<script id="sap-ui-bootstrap"
	src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"
	data-sap-ui-theme="sap_bluecrystal"
	data-sap-ui-libs="sap.m, sap.ui.comp"
	data-sap-ui-bindingSyntax="complex" 
	data-sap-ui-compatVersion="edge"
	data-sap-ui-preload="async"
	data-sap-ui-resourceroots='{
		"sap.ui.demo.CombineLatest": "./"
	}'>
</script>

我刚学习 SAP UI5 时,对 data-sap-ui-resourceroots 的作用很是费解。

浏览我们开发的整个 SAP UI5 项目资源,无论是 Component.js:


还是视图的控制器:

还是视图的 id 本身,都包含了 sap.ui.demo.CombineLatest 的前缀:

如果我们把 index.html 里的 data-sap-ui-resourceroots 指令去掉:

会发现应用根本无法加载了,Chrome 开发者工具里报了很多资源文件无法加载的错误。

摘取其中一条错误消息出来分析。现在 Component.js 的加载路径为:

https://sapui5.hana.ondemand.com/resources/sap/ui/demo/CombineLatest/Component.js

显然,这个路径是继承自 index.html 里 id 为 sap-ui-bootstrap 里的 src 属性定义的 SAP UI5 库文件:

我们工程文件里的 Component.js, 其 id 为 sap.ui.demo.CombineLatest.Component:

SAP UI5 框架在加载时,将 id 转换成 url:

sap/ui/demo/CombineLatest/Component.js,

然后在其头部,拼接上来自 id 为 sap-ui-bootstrap 里的 src 属性定义的 SAP UI5 库文件的前缀:

https://sapui5.hana.ondemand.com/resources/

最后得到的路径:

https://sapui5.hana.ondemand.com/resources/sap/ui/demo/CombineLatest/Component.js

显然,这个路径是错误的。因为 Component.js 仅仅存在于我们工程自身。

因此需要使用 data-sap-ui-resourceroots 告诉 SAP UI5 加载器,如果遇到前缀为 sap.ui.demo.CombineLatest 的本地资源文件,**不要使用 sap-ui-core.js **的前缀即 https://sapui5.hana.ondemand.com/resources,而是使用本地路径./

修改之后,资源加载成功,正确的路径应该是:http://localhost:3002/combine/Component.js

这个路径是怎么来的呢?

(1) Component.js 的 id 为 sap.ui.demo.CombineLatest.Component,因为 data-sap-ui-resourceroots 生效,将 sap.ui.demo.CombineLatest.Component 替换成 ./Component

(2) ./Component 替换成 URL:/Component.js

(3) ./之前的 url 为 localhost:3002/combine

得到最后的绝对路径去加载 Component.js:

http://localhost:3002/combine/Component.js

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。