2016-12-29 75 views
0

我需要創建一個UI5 coustom控件,我需要載入ESRI地圖。需要創建一個需要其他AMD模塊的UI5自定義控件

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庫加載,如果我下面加載,

​​

它不會加載,因爲它不是UI5模塊

我要做的要求如下

require(["esri/map"],function(Map){ 

我需要幫助來編寫一個UI5自定義控件或模塊,我必須在返回第一個代碼之前將UI5模塊和ESRI AMD模塊加載在一起。

+0

你正在使用哪個IDE /編輯器?我有同樣的問題,所以需要更多的細節。你使用除jQuery之外的任何其他JS庫嗎? –

+0

IDE日食,只有ui5 – chiranjeevigk

+0

如果我沒有錯,你正在開發這樣的https://github.com/Vikash2402/Lumira-Custom-Extension-AboutLumira而不是你使用SAPUI5應用程序的可視化擴展。 –

回答

0

一般而言,大多數AMD模塊加載程序不支持ArcGIS API for JavaScript使用的Dojo AMD插件語法(例如:dojo/i18n)。因此,加載這些模塊的唯一可靠方法是使用上面提到的Dojo的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()中進行異步請求。如果不是,您可能需要找到另一個要求的地方。

該模式在更詳細的描述in this blog post中有詳細描述,它鏈接到其在React和Angular應用程序中使用的其他示例。您也許也可以使用esri-loader,它只是提供一個API來隱藏全局使用require()