2012-05-16 605 views
6

Estoy intentando crear un tema en el huerto y he añadido una secuencia de comandos incluye en mi diseño:Orden de Javascript incluye en 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(); 

quiero cargar jQuery CDN de Google, pero tienen un repliegue local si la versión CDN no se puede cargar. Para lograr esto, agregué el bloque de script justo después del script jQuery. Sin embargo cuando se mira en la fuente de la página generada, que parece:

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

El problema es que mi retorno es ahora, después de todos los demás guiones, mientras que me gustaría que sea justo después de la secuencia de comandos de jQuery CDN incluyen.

¿Hay alguna manera de que pueda controlar dónde Orchard renderiza bloques de script en línea?

Respuesta

2

Parece que actualmente no hay forma de controlar el orden de las secuencias de comandos cuando se mezcla Script.Include() con Script.Head() o Script.Foot().

Sin embargo, hay una manera en que puede usar CDN con Orchard. Pero, desafortunadamente, no funciona como debería. Debería poder especificar Script.Require("jquery").AtHead().UseCdn() para manejar lo que está tratando de hacer aquí. Estos métodos ya existen, pero no están trabajando por 2 razones:

  1. módulo de jQuery actualmente no especifica CDN URL
  2. Los métodos que se basan en UseCdn() método para generar la secuencia de comandos etiquetas no funcionan como deberían

Ya existe un reported issue en Orchard Codeplex para este problema. El equipo de Orchard cambió su estado a Active, así que con suerte, el error se resolverá pronto. He votado sobre el tema y usted puede indicar al equipo de Orchard que resuelva este error más rápido que otros errores.

Mientras tanto, se puede hacer lo mismo que yo - Añadir Document.cshtml plantilla a su tema (se puede copiar desde /Core/Shapes/Views/Document.cshtml), encontrar esta línea: @Display(Model.Head) (este es el lugar donde todos los scripts y estilos de cabeza ir) y, por último, por encima de esa línea se puede agregar este código:

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

y el cambio [NAME-OF-YOUR-THEME] con el nombre de la carpeta de tu tema.

Cuestiones relacionadas