我在确定将第三方库(如Google Maps JavaScript API)导入UI5应用程序的最佳方法时遇到了麻烦。到目前为止,我已经考虑了以下方法:
- 在
index.html
中使用<script>
标记,例如<script src="https://maps.googleapis.com/maps/api/js?key=api_key"></script>
这在本地测试时有效,但如本 SAP 博客文章中所述,从 SAP Fiori Launchpad 启动的应用程序通过Component.js
启动,而不是index.html
- 同一篇博客文章提到 通过
sap.ui.define
导入库 ,这实际上是我正在使用应用程序中已有moment.js
做的事情,它有效。问题是谷歌地图API没有公开全局实例名称/不包含可以导入的单个JS文件,因此此导入失败。去年6月有人提出过类似的问题,但没有得到答复。 - 对同一问题的评论提到使用
require.js
导入Google Maps API。这可能会起作用,但似乎是一个黑客。感觉应该有一些特定于 UI5 的方法可以做到这一点,而无需导入另一个第三方库。 - 最后,这篇SAP博客文章建议在窗口加载后手动创建Google Maps导入
<script>
标签并将其附加到DOM中。这似乎也是一个黑客,但可能是目前实现这一目标的唯一方法。
任何帮助确定实现这一目标的正确方法将不胜感激!
好吧,我会这样做:
- 为地图创建自定义控件(最好从sap.ui.core.HTML);
- 在此控件
init
方法中,通过向页面添加脚本标记来加载GoogleMaps(此处不需要加载事件,因为执行此代码时页面已加载); renderer
此新控件,请创建一个将呈现地图的div
;- HTML控件具有非常重要的属性 - "preferDOM",这必须设置为
true
,否则,当UI5渲染周期发生时,GoogleMap将被销毁并再次创建,在这种情况下这是非常糟糕的用户体验。
有很多不同的方法可以在UI5应用程序中实现谷歌地图:
如果您使用的是SAPUI5:则可以配置用于通用地图集成的控件,以使用Google地图作为提供程序: https://sapui5.hana.ondemand.com/#/entity/sap.ui.vbm.GeoMap https://sapui5.hana.ondemand.com/#/entity/sap.ui.vk.MapContainer
如果您使用的是 OpenUI5,您可能会对这个将 google API 包装在自定义控件中的社区库感兴趣: https://github.com/jasper07/openui5-googlemaps
如果你需要其他东西,你可以按照上面的海报解释直接注入谷歌的JavaScript,并将地图注入到应用程序中,但它可能不够灵活。您始终可以创建一个简单的自定义控件,为地图呈现空div,并将其与maps API连接,以通过Google API呈现地图。
但是,请注意Google TOS,他们可能需要许可证才能在您的代码中有效地使用地图API。
玩得愉快 迈克尔
我最终做了以下操作,这似乎提供了所需的结果:
jQuery.sap.includeScript(
"https://maps.googleapis.com/maps/api/js?key=api_key",
"includeGoogleMaps",
function () {
// Do things
}
);
我在以下堆栈溢出问题中找到了此解决方案:
- 在 sapui5 中使用外部 js 库
- UsingjQuery.sap.includeScript().then() in HCP Firori Launchpad
如果建议的解决方案有任何问题,请告诉我。