2017-10-30 17 views
0

내 코드에 ArcGIS API for JavaScript v4.4을 사용하는 동안이 이상한 문제가 있습니다. ArcGIS지도를로드하고 싶지만 ArcGIS를로드 할 때 Excel 웹 추가 기능을 작성하려고하는데 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/세 가지 시험에서 한 번 multipleDefine 오류가 발생합니다. 많은 조사 끝에 Office.js API에 오류가 있다는 것을 이해했지만 좋은 해결책을 찾기가 어려웠습니다.

답변

0

잠시 후 나는 문제의 원인을 발견했다. 우리는 페이지의 head 태그에 스크립트를 추가하기를 원하기 때문에 office-js와 Dojo를 함께 시작할 수 없으며 결국에는 충돌로 끝납니다. 따라서 우리는 두려운 multipleDefined Dojo 오류를 얻고 일부 파일은 얻을 수 없습니다 짐을 실은.

이 원인이 확인되면 Office와 종속성이 완전히로드 된 후에 Dojo, Argis 및 내 사용자 정의 js 파일을로드하여 해결하기로 결정했습니다.

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

를이 코드가 마법처럼 일하기 시작 하였다되면.