2017-10-30 26 views
0

私のコードでArcGIS API for JavaScript v4.4を使用している間、私はこの奇妙な問題を抱えています。 ArcGISマップをロードするExcel Webアドインを作成しようとしていますが、ArcGISをロードするときにmultipleDefineエラーが発生します。ArcGIS API(Esri)がmultipleDefineエラーを発生させる

ArcGISはすべてのArcGIS/esriパッケージのローダーとして使用されるDojoでバンドルされています。 ArcGISにAPIを組み込んだ方法のため、独自のカスタムJSバンドルをDojoでロードする方法は他にありません。 Dojoを使用しないようにして、multipleDefineエラーが発生しないようにすることはできません。

私はこのように私自身のJSファイルをロード:私はページを再起動すると

<script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js" type="text/javascript"></script> 

<script> 
    var dojoConfig = { 
     parseOnLoad: false, 
     async: false, 
     // we make aliases for our js file 
     aliases:  [ 
      ['index',  './Bundles/index.js'], 
     ], 
    }; 
</script> 
<script src="https://js.arcgis.com/4.4/init.js"></script> 
<script> 
    require(['index'], function (index) { 
     //...do something 
    }); 
</script> 

は、私はすべての2/3試験で一度multipleDefineエラーが発生します。多くの調査の後、私はこのエラーがOffice.js APIにあると理解しましたが、良い解決策を見つけるのは苦労しました。

答えて

0

しばらくすると、問題の原因がわかりました。 office-jsとDojoを一緒に開始することはできません。なぜなら、ページのheadタグにスクリプトを追加して、何らかの形でそれらが矛盾してしまい、恐ろしいmultipleDefined Dojoエラーが発生し、いくつかのファイルが取得できないからです。ロードされる。

この原因が特定されたら、Dojo、Argis、私のカスタムjsファイルがOfficeと依存関係が完全にロードされた後にロードされるようにして解決することにしました。

私は私のJSコードでこのようにそれを実装:これは、コードが魔法のように働き始めを添加した後は

// This Dojo config variable has to be defined before Dojo is loaded in our scripts 
var dojoConfig = { 

    // we make aliases for our custom js file 
    aliases: [ 
     ['index', './Bundles/index.js'], 
    ], 

    // We require our dependencies (our own code bundles) with Dojo. 
    // Notice that it is mandatory to bundle our js files 
    // as AMD Modules for Dojo to be able to load them as dependencies. 
    deps: ['index'], 
}; 

// Once office has fully initialized we can add our arcgis file and let 
// him load our own required javascript files. 
// We cannot start Office-js and Dojo/Arcgis together because they both 
// want to add scripts in the head tag of the HTML page and 
// somehow they end up in conflict, thus we get the dreaded 
// multipleDefined Dojo error and some of our files 
// do not get loaded. 

Office.initialize = function (reason) { 
    // we manually add the Arcgis script to the header of our page 
    // once we are sure Office and dependencies has fully loaded. 
    var tag = document.createElement('script'); 
    tag.src = 'https://js.arcgis.com/4.4/init.js'; 
    document.getElementsByTagName('head')[0].appendChild(tag); 
};