2012-03-06 6 views
7

Soy bastante nuevo en MVC y no puedo decidir sobre la mejor manera de almacenar archivos cshtml y sus respectivos códigos JavaScript. Algunos códigos JS en mi proyecto deben ejecutarse de forma global, pero la mayor parte están vinculados por completo a vistas específicas o vistas parciales.MVC: ¿hay una buena manera de agrupar controles con su respectivo javascript?

Si pongo el javascript en las vistas, me da un caos de javascript en línea incable, si lo pongo en un archivo central, pierdo modularidad.

Escuché que en MVC4 habrá características de minificación, ¿hay algo que pueda hacer con MVC3 que me permita elegir en las vistas qué javascripts incluir y luego agruparlos y minificarlos automáticamente? (¿Quizás incluso en grupos?)

+1

tener ambas cosas, código que se reutiliza en un archivo global y el código que es vista específica en la vista. –

+0

Una de mis preocupaciones es tener muchas llamadas http a muchos archivos diferentes, así que si pongo código específico de control en un archivo separado, termino con un montón de solicitudes – Madd0g

Respuesta

6

Cassette es esencialmente lo mismo que los próximos paquetes MVC4.

En su página de vista, puede hacer referencia a las secuencias de comandos y hojas de estilo utilizando la clase de ayuda Bundles de Cassette.

@{ 
    Bundles.Reference("Scripts/jquery.js"); 
    Bundles.Reference("Scripts/page.js"); 
    Bundles.Reference("Styles/page.css"); 
} 
<!DOCTYPE html> 
    <html> 
... 

Además, casete tiene soporte nativo para Less y CoffeScript. También tiene soporte para plantillas HTML, si está interesado en marcos MVC del lado del cliente como Knockout.js o Backbone.js.

Todavía tiene que elegir cómo agrupar su contenido. Como sugiere official documentation, probablemente la mejor opción es tratar paquetes como unidades de implementación.

Tenga en cuenta que un paquete es una unidad de despliegue. Si algún activo en un paquete cambia, entonces el paquete completo debe ser descargado nuevamente por los navegadores web. Entonces, quizás agrupe código compartido en un paquete y coloque scripts de página en sus propios paquetes.
1

Puede colocar el javascript en archivos separados, para cada vista. Luego, en el _Layout.cshtml introducir un @RenderSection a la cabeza:

<head> 
    <script src="@Url.Content("~/Scripts/jquery-1.7.1.js")" type="text/javascript"></script> 
    @RenderSection("head",false) 
</head> 

Luego, en cada punto de vista, se puede poner una sección que se representará en el encabezado:

@section head{ 
    <script src="@Url.Content("~/ViewScripts/Order/New.js")" type="text/javascript"></script> 
} 
+0

sí, sé sobre secciones, pero ¿qué pasa si dos parciales necesitan la mismo javascript? No quiero múltiples llamadas al mismo archivo, sé que prácticamente los navegadores no los llamarán dos veces, pero seguirán en el html – Madd0g

+0

Mi solución solo maneja el caso de vistas "vistas específicas". No he tenido la necesidad de guiones parcialmente específicos (todavía), así que no he pensado en una solución. –

+0

nitpick, ponga la sección JS antes de la etiqueta '' de cierre, no la etiqueta '' (evite el bloqueo) – RPM1984

0

@Ander El enfoque de s es bueno si requiere que los scripts estén en la etiqueta de la cabeza. Pero creo que la mayoría de las veces no es necesario si es JavaScript específico de la página. Puede colocar las etiquetas de secuencia de comandos que hacen referencia a los archivos de secuencia de comandos donde sea necesario en la Vista. Automatically bundling and minification will be supported in ASP.NET 4.5. Hasta ese momento, puede integrar yuicompressor en Visual Studio.

+0

Estoy realmente sorprendido, pensé que estaba haciendo una pregunta tonta y que la gente se va a reír y me proporcionará enlaces lmgtfy. Ni siquiera llegué tan lejos en mi proyecto y me duele cada vez que necesito escribir un javascript específico de la página. El sistema de controlador/vista en capas de MVC es perfecto para algo como esto ... – Madd0g

+0

Depende del tipo de aplicación. Si va a tener una interfaz de usuario rica que depende mucho de AJAX, entonces se requiere una página javascript específica. En este caso, mueve el MVC o MVVM a la página utilizando un marco como Knouckout.js o Backbone.js. –

0

No es una buena práctica de utilizar la escritura en los parciales (en mi punto de vista)

se le sugeriría a escribir guión específico parcial para separar js y enlazar eventos de carga de la página o si parcial se cargó a través de AJAX luego en caso de éxito.

entonces usted puede estar seguro de que los acontecimientos no están obligados varias veces y la vista es simplemente una vista

Cuestiones relacionadas