2012-05-16 2 views
6

Sto cercando di creare un tema in Orchard e ho aggiunto un po 'di script include nel mio layout:Ordine di JavaScript comprende in Orchard

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(); 

voglio caricare jQuery da Google CDN, ma hanno un ripiego locale se la versione CDN non può essere caricata. Per raggiungere questo obiettivo ho aggiunto il blocco di script subito dopo lo script jQuery. Tuttavia, quando guardando il sorgente della pagina generata, sembra che:

<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> 

Il problema è che la mia riserva è ora, dopo tutti gli altri script, mentre vorrei che fosse subito dopo lo script jQuery CDN includere.

Esiste un modo per controllare dove Orchard rende i blocchi di script inline?

risposta

2

Sembra che al momento non sia possibile controllare l'ordine degli script quando si mescola Script.Include() con Script.Head() o Script.Foot().

Vi è, tuttavia, un modo per utilizzare CDN con Orchard. Ma, sfortunatamente, non funziona come dovrebbe. Dovresti essere in grado di specificare Script.Require("jquery").AtHead().UseCdn() per gestire ciò che stai cercando di fare qui. Esistono già Tali metodi, ma non stanno lavorando per 2 motivi:

  1. modulo jQuery attualmente non specifica CDN URL
  2. I metodi che si basano su UseCdn() metodo per generare lo script tag non funzionano come dovrebbero

C'è già un reported issue su Orchard Codeplex per questo problema. Il team di Orchard ha cambiato il suo stato in Active quindi, si spera, il bug verrà risolto presto. Ho votato il problema e così puoi segnalare al team di Orchard di risolvere questo bug più velocemente di altri bug.

Nel frattempo, si può fare la stessa cosa che faccio - aggiungo Document.cshtml modello per il tema (è possibile copiare da /Core/Shapes/Views/Document.cshtml), trova questa riga: @Display(Model.Head) (questo è il luogo dove tutti gli script di testa e stili vai) e, infine, al di sopra quella linea è possibile aggiungere questo codice:

<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> 

e cambiare [NAME-OF-YOUR-THEME] con il nome della cartella del vostro tema.