我在加载UI5页面后尝试测试Incluctercript函数以加载外部JS库。它在脚本加载后的所有情况下都可以使用,可以访问。但是,如果具有ChartContainer控制,则无法访问加载的JS库。
- 工作案例,选择地图容器控制的样品页面:https://sapui5.hana.ondemand.com/#/tity/sap.ui.mapcontainer/sample/sample/sampam/samp.ui.vk.sample.mapcontainer.mapcontainerbasic,加载页面后,打开开发人员工具,在控制台面板中运行下面的脚本。
var includeScript = sap.ui.require("sap/ui/dom/includeScript"); try { dateFns.isToday(new Date()); } catch (err) { new Promise(function(fnResolve, fnReject) { includeScript( "https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.min.js", "datefns_js", fnResolve, fnReject); }).then(function() { console.log("datefns_js is loaded!!!") console.log(dateFns.isToday(new Date())); }); }
<script src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"></script>
加载日期后,执行下一个命令:
datefns.istoday(new Date(((;
自dateFNS JS加载并可以访问以来,它在控制台中返回真实。
- 无动物,特别是在测试ChartContainer控件时,在新会话中打开图表容器控制的打开示例页面:https://sapui5.hana.ondemand.com/#/entity/sap.sap.suite.suite.ui.commons.chartcontainer/sample/sap.suite.ui.commons.sample.chartcontainersimpletoolbar打开开发人员工具,并重复与上述相同的步骤。由于库是加载但无法访问的,因此错误发生为"未定义的参考文献:未定义dateFNS"。
我希望加载的外部JS库应在我的UI中具有任何控件。
来自sapui5文档:
使用统一模块定义(UMD(语法的模块可以加载,但是只有在没有AMD加载器存在或将其导出也将其导出到全局名称空间时,即使存在AMD加载程序
,
不幸的是,SAPUI5图表使用另一个AMD加载程序(RequireJS
(,因此您的模块date-fns
将使用requirej加载,并且无法用于全局window
对象。
要解决此问题,您可以强制将模块始终加载到requirejs上,然后通过require
方法可用:
<script src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"></script>
<script>
var declareLibs = new Promise(function (resolve, reject) {
sap.ui.require(["sap/ui/thirdparty/require"], function () {
requirejs.config({
paths: {
"date_fns": ["//cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.min"]
}
});
resolve();
});
});
declareLibs.then(require(["date_fns"], function (dateFns) {
console.log("datefns_js is loaded!")
console.log(dateFns.isToday(new Date()));
}));
</script>