Javascript 需要创建一个UI5自定义控件,它需要一些其他AMD模块
我需要创建一个UI5 coustom控件,在这里我需要加载ESRI映射Javascript 需要创建一个UI5自定义控件,它需要一些其他AMD模块,javascript,custom-controls,sapui5,arcgis-js-api,Javascript,Custom Controls,Sapui5,Arcgis Js Api,我需要创建一个UI5 coustom控件,在这里我需要加载ESRI映射 sap.ui.define([ "sap/ui/core/Control" ], function (Control) { "use strict"; return Control.extend("custom.map.ESRIMap", { init : function(){ this._map = new Map('mapDiv',esriMapOptions); } }); });
sap.ui.define([
"sap/ui/core/Control"
], function (Control) {
"use strict";
return Control.extend("custom.map.ESRIMap", {
init : function(){
this._map = new Map('mapDiv',esriMapOptions);
}
});
});
这就是我想要编写自定义控件的方式
我将ESRI javascript API加载为
jQuery.sap.includeScript({
url : "https://js.arcgis.com/3.18/init.js",
id : 'esriApi'
});
我面临的问题是ESRI库加载,如果按如下方式加载
sap.ui.define([
"sap/ui/core/Control"
"esri/map
], function (Control,Map) {
它不会加载,因为它不是ui5模块
我必须做如下要求
require(["esri/map"],function(Map){
我需要帮助来编写UI5自定义控件或模块,在返回第一个代码之前,我必须将UI5模块和ESRI AMD模块一起加载。一般来说,大多数AMD模块加载程序不支持ArcGIS API for JavaScript使用的Dojo AMD插件语法(例如:)。因此,加载这些模块的唯一可靠方法是使用您上面提到的Dojo的
require()
当使用其他模块加载器时,我们经常使用“嵌套的require”模式。在您的情况下,它看起来像这样:
sap.ui.define([
"sap/ui/core/Control"
], function (Control) {
"use strict";
return Control.extend("custom.map.ESRIMap", {
init : function() {
require(["esri/map"],function(Map){
// now you have access to Control and Map
this._map = new Map('mapDiv',esriMapOptions);
});
}
});
});
请记住,require()
是异步的,很可能会导致网络请求获取模块脚本。我对UI5框架一无所知,也不知道是否可以在控件的init()
中发出此类异步请求。如果没有,您可能需要另找一个地方进行安装
本文将更详细地描述此模式,并将其链接到如何在React和Angular应用中使用的其他示例。您也可以使用,它只提供了一个API来隐藏对
require()
global的使用。您使用的是哪个IDE/编辑器?我有同样的问题,所以需要更多的细节。除了jquery,你还使用其他JS库吗?IDE eclipse,只有UI5如果我没记错的话,你正在开发这样的东西,而不是使用SAPUI5应用程序的可视化扩展。。对吗?哦,日食。。让我查一下。。。