Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要创建一个UI5自定义控件,它需要一些其他AMD模块_Javascript_Custom Controls_Sapui5_Arcgis Js Api - Fatal编程技术网

Javascript 需要创建一个UI5自定义控件,它需要一些其他AMD模块

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); } }); });

我需要创建一个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);
    }
});
});
这就是我想要编写自定义控件的方式

我将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应用程序的可视化扩展。。对吗?哦,日食。。让我查一下。。。