2012-03-06 7 views
7

Sono piuttosto nuovo in MVC e non riesco a decidere il modo migliore per archiviare i file cshtml e il loro rispettivo codice javascript. Alcuni codici JS nel mio progetto devono essere eseguiti globalmente, ma la maggior parte di essi è interamente legata a viste specifiche o viste parziali.MVC - c'è un bel modo per raggruppare i controlli con i rispettivi javascript?

Se inserisco il javascript nelle viste, ottengo un pasticcio di javascript non in linea non memorizzabile, se lo metto in un file centrale, perdo la modularità.

Ho sentito dire che in MVC4 ci saranno funzioni di minimizzazione, c'è qualcosa che posso fare con MVC3 che mi permetterà di scegliere nelle viste quali javascript includere e quindi raggrupparli e ridurli automaticamente? (forse anche in gruppo?)

+1

avere entrambi, il codice che viene riutilizzato in un file e codice globale che è vista specifica nella vista. –

+0

Una delle mie preoccupazioni è avere molte chiamate http a molti file diversi, quindi se inserisco il codice specifico di controllo in un file separato, finisco con un sacco di richieste – Madd0g

risposta

6

Cassette è essenzialmente la stessa cosa dei pacchetti MVC4 in arrivo.

Nella pagina di visualizzazione, è possibile fare riferimento a script e fogli di stile utilizzando la classe di supporto Bundles di Cassette.

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

Inoltre, Cassette ha il supporto nativo per Less e CoffeScript. Ha anche il supporto per i modelli HTML, se sei interessato a framework MVC lato client come Knockout.js o Backbone.js.

Ancora devi scegliere come raggruppare i tuoi contenuti. Come suggerisce official documentation, probabilmente la scelta migliore è trattare i bundle come unità di distribuzione.

Tenere presente che un pacchetto è un'unità di distribuzione . Se qualche risorsa in un pacchetto cambia, allora l'intero pacchetto deve essere nuovamente scaricato dai browser web. Quindi forse raggruppare il codice condiviso in un pacchetto e inserire gli script di pagina nei propri bundle.
1

Puoi inserire il javascript in file separati, per ogni vista. Poi nel _Layout.cshtml inserire un @RenderSection alla testa:

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

Poi in ogni vista, si può mettere una sezione che verranno resi nell'intestazione:

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

sì, so di sezioni, ma cosa succede se due partial richiedono il stesso javascript? Non voglio più chiamate allo stesso file, so che praticamente i browser non le chiameranno due volte, ma saranno comunque nella versione HTML – Madd0g

+0

La mia soluzione gestisce solo le visualizzazioni "viste speciche". Non ho ancora avuto bisogno di script parziali specifici (ancora), quindi non ho pensato a una soluzione. –

+0

nitpick, inserire la sezione JS prima del tag di chiusura '', non il tag '' (impedire il blocco) – RPM1984

0

@Ander L'approccio di s è buono se richiedi che gli script siano nel tag head. Ma trovo che la maggior parte delle volte non è necessario se si tratta di JavaScript specifico per pagina. Puoi mettere i tag script che fanno riferimento ai tuoi file di script, ovunque siano richiesti nella vista. Automatically bundling and minification will be supported in ASP.NET 4.5. Fino a quel momento è possibile integrare yuicompressor in Visual Studio.

+0

Sono davvero sorpreso, ho pensato che stavo facendo una domanda stupida e che le persone ridessero e mi fornissero collegamenti lmgtfy. Non sono ancora così lontano nel mio progetto e mi fa male ogni volta che devo scrivere javascript specifico per pagina. Il controller a livelli/sistema di visualizzazione di MVC è perfetto per qualcosa di simile .. – Madd0g

+0

Dipende dal tipo di applicazione. Se hai una ricca interfaccia utente che dipende molto da AJAX, è necessario un javascript specifico della pagina. In questo caso, si sposta MVC o MVVM nella pagina utilizzando un framework come Knouckout.js o Backbone.js. –

0

Non è una buona pratica di utilizzare script nella parziali (dal mio punto di vista)

è suggerire di scrivere script specifico parziale per separare js e legare gli eventi al caricamento della pagina o se parziale è stato caricato tramite ajax quindi in caso di successo.

allora si può essere sicuri che gli eventi non sono vincolati più volte e la vista è solo una vista

Problemi correlati