2011-11-22 101 views
1

我對Dojo很新,而且遇到了dojo.require()的問題。我正在使用託管在雲中的Dojo版本。我想用dojo.require()加載我自己的模塊,但這似乎並不奏效。我已經設置了basUrl,但每當我嘗試加載模塊時,都會遇到有關訪問跨域資源的錯誤(並且在實際發生此錯誤之前需要一段時間)。它正在嘗試加載的文件是我請求的模塊。當我調試時,我可以忽略這個錯誤,並且我的模塊仍然正確加載。但我無法找出到底爲什麼道場試圖加載的東西跨域...Dojo.require()試圖加載跨域資源

這是我的HTML文件的文件頭的樣子:

<script type="text/javascript"> 
    var dojoConfig = { 
     isDebug: true, 
     baseUrl: '../../' 
    }; 
</script>  

<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6.1/dojo/dojo.xd.js.uncompressed.js" type="text/javascript"></script> 

<script type="text/javascript"> 
    dojo.require("client.apps.customers.overview"); 

    dojo.ready(function() { 
     overview.open(); 
    }); 
</script> 

「client.apps.customers。概述「是我正在嘗試加載的模塊。這究竟是怎麼overview.js文件的開頭是這樣的:

dojo.provide("overview"); 

dojo.require("dijit._Widget"); 
dojo.require("dijit._Templated"); 
+2

跨域模塊是那些「在雲中」,而不是你自己的。你可以在這裏發佈你的頭部部分,看看你如何配置dojo以及你如何滿足你的需求? – Philippe

回答

1

嗯,overview.js需要放置在客戶端/應用/用戶/(相對於你的baseUrl)文件,和dojo.provide必須給出全部命名空間和類的調用。你的情況:

dojo.provide("client.apps.customers.overview"); 
+0

我試過這個,但它仍然不起作用。看來Dojo實際上是試圖加載「client.apps.customers.overview」作爲跨域資源。 – svb

+0

@svb:奇怪。只是爲了檢查,你可以嘗試使用djConfig而不是dojoConfig嗎? – Frode

+0

@svb或者如果它更方便,在應用程序加載完成後在螢幕控制檯中運行'alert(dojo.config.baseUrl);'。我建議這樣做的原因是,此線程暗示可能存在djConfig/dojoConfig遷移錯誤:http://dojo-toolkit.33424.n3.nabble.com/dojoConfig-scopeMap-how-td3215933.html – Frode

1

除了匹配的要求,並提供報關單的弗羅德的建議,我認爲你需要添加額外的配置告訴道場在哪裏可以找到「客戶」命名空間:

dojoConfig = { 
    /*...*/, 
    modulePaths: { 
     client: 'path_to_the_client_folder' 
    } 
}; 

您可以通過在Firebug/Chrome控制檯上查看當您嘗試訪問何種資源時執行請求調用,從而檢查是否存在錯誤。我相信它可能會在默認位置http://ajax.googleapis.com/ajax/libs/dojo/1.6.1/client(dojo,dijit和dojox旁邊)中搜索「客戶端」模塊,但是您的模塊將確定位於其他位置。