2012-05-16 36 views
6

我試圖創建果園主題,並增加了一些腳本,包括在我的佈局:秩序的Javascript包括果園

Script.Include("//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js").AtHead(); 
using (Script.Head()) { 
    @:<script>window.jQuery || document.write('<script src="scripts/jquery-1.7.1.min.js"><\/script>')</script> 
} 

Script.Include("plugins.js").AtHead(); 
Script.Include("script.js").AtHead(); 

我想從谷歌CDN加載jQuery的,但有一個本地備用如果CDN版本無法加載。爲了達到這個目的,我在jQuery腳本之後添加了腳本塊。但是看着生成的頁面源時,它看起來像:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" 
type="text/javascript"></script> 
<script src="/OrchardLocal/Themes/Test/scripts/plugins.js" type="text/javascript"> 
</script> 
<script src="/OrchardLocal/Themes/Test/scripts/script.js" type="text/javascript"> 
</script> 
<!--[if lt IE 9]> 
<script src="/OrchardLocal/Core/Shapes/scripts/html5.js" type="text/javascript">  
</script> 
<![endif]--> 
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.1.min.js"><\/script>') 
</script> 

的問題是,我的後備現在是所有其它腳本後,而我想這是正確的後jQuery的CDN腳本包括。

有什麼方法可以控制Orchard渲染內聯腳本塊的位置?

回答

2

看來,當您將Script.Include()Script.Head()Script.Foot()混合在一起時,目前無法控制腳本的順序。

然而,有一種方法可以在果園中使用CDN。但是,不幸的是,它不能正常工作。您應該能夠指定Script.Require("jquery").AtHead().UseCdn()來處理您要在此處執行的操作。這些方法已經存在,但它們不工作原因有二:

  1. jQuery的模塊目前沒有指定的URL CDN
  2. 依靠UseCdn()方法來生成腳本標籤不作爲的工作方法他們應該

對於此問題,Orchard Codeplex已經有reported issue。 Orchard團隊將其狀態更改爲Active,所以希望該錯誤很快就會解決。我已經對這個問題投了贊成票,所以你可以指示Orchard團隊更快地解決這個錯誤,而不是其他一些錯誤。

在此期間,你可以做同樣的事情,因爲我 - 添加Document.cshtml模板,你的主題(你可以從/Core/Shapes/Views/Document.cshtml複製),找到這一行:@Display(Model.Head)(這是地方所有你的頭腳本和樣式去),最後,這條線上面可以添加以下代碼:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script>!window.jQuery && document.write('<script src="@Url.Content("~/Themes/[NAME-OF-YOUR-THEME]/Scripts/jquery-1.7.1.min.js")"><\/script>')</script> 

,並更改[NAME-OF-YOUR-THEME]與主題的文件夾名稱。