2013-03-13 41 views
2

我正在嘗試使用由Dojo加載的使用dojo.requireEsri ArgGis JavaScript API。我有一個現有的模塊AMD/requirejs Typescript應用程序,我需要將此代碼集成到。在我最初的TS文件的頂部,我輸入幾個模塊:我該如何解決這個AMD路徑衝突?

import tracer = module('../classes/trace'); 
import pubsub = module('../classes/pubsub'); 
import masker = module('../classes/masker'); 
// etc. 

這是工作的罰款,但現在,我已經添加了ArcGIS的代碼,而不是解決我的應用程序中的相對路徑,require.js有拿起從ESRI的網站的baseUrl,並試圖加載:

http://serverapi.arcgisonline.com/jsapi/arcgis/3.3/js/esri/classes/trace.js 
// etc. 

在404個響應和腳本錯誤的字符串由此而來。

我該如何解決這個問題?

我試圖加載,加載模塊的頭文件之前設置在我的HTML文件的頭部requirejs的baseUrl:

<script src="http://serverapi.arcgisonline.com/jsapi/arcgis/3.3"></script> 
<script type="text/javascript" src="/content/client/libs/require.js"></script> <!-- data-main="/content/client/hop/hop.app" --> 
<script type="text/ecmascript"> 
     require.config({ 
      baseUrl: "/Content/client/hop/" 
     }); 
</script> 
<script src="~/Content/client/hop/hop.app.js"></script> 

但這種失敗,投擲要求沒有方法配置一個例外。 (注意:如果我顛倒了html文檔頭部的順序,以便arcgis api在加載順序中最後出現,我得到了相反的問題 - 我的本地文件一切正常,但dojo和映射API失敗,因爲當他們應該在argis服務器上搜索時,他們正在尋找相對於我的網站的路徑)。

回答

6

我使用Esri的ArcGIS API,因此遇到了這個問題。 This來自dojo的博客文章幫助我解決了一些問題。

第一個問題是dojo的配置方式與requirejs的配置方式不同。它尋找一個先前定義的dojoConfig來設置。第二個是Esri的模塊加載全部設置爲假設一個基本路徑,並且您的代碼將要另一個。你會需要一個道場的配置看起來是這樣的:

dojoConfig = { 
    baseUrl: location.pathname.replace(/\/[^/]+$/, '') + '/Content/client/hop/', // magic! 
    packages: [ 
     { 
      name: 'dojo', 
      location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.3compact/js/dojo/dojo/" 
     }, 
     { 
      name: 'dojox', 
      location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.3compact/js/dojo/dojox" 
     }, 
     { 
      name: 'esri', 
      location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.3compact/js/esri" 
     } 
    ] 
}; 

這是什麼東西做的是設置基本路徑返回到當前的URL加上你的額外的東西,然後告訴道場其中ESRI的東西。這些都是我遇到過的所有軟件包,但如果我錯過了一個依賴項,因爲它從來沒有加載過我,它需要一個類似的條目。

您可能遇到的另一個問題是,如果您習慣在本地將文件加載爲file://現在另一個域的dojo將嘗試訪問file://並且瀏覽器將關閉該文件向下。從現在開始,您需要在本地http服務器上進行測試。在Windows上,我更喜歡HFS和Linux python makes it easy

我希望這會有所幫助。

+0

謝謝Jeffrey - 這真的很有用。我已經將地圖放入iframe中,以便在截止日期前完成,但我會在下週嘗試一下,並接受它是否有效。 – JcFx 2013-03-13 18:26:25

1

由於兩者之間存在require()衝突,我使用dojo和requirejs有幾個問題。你應該看看道場臭蟲15616。您可能需要從James小組提供的所有道場或所有requirejs的谷歌小組中查看此thread

我不確定您使用的dojo版本是什麼版本,但是從源代碼檢查,因爲requirejs/dojo的相關更改不在發佈版本1.8中。

如果您只有問題引起的baseUrl衝突的解決方法是創建一個.d.ts文件別名的路徑一樣../classes/trace並與工作的路徑(絕對或以其他方式)將其替換404錯誤。

+0

謝謝,瑞安 - 有用的信息。 – JcFx 2013-03-13 18:26:50