Modello Hot Towel
Il modello hot towel MVC è scritto da John Papa
Scegliere la versione da scaricare:
Modello MVC a caldo per Visual Studio 2012
Modello MVC a caldo per Visual Studio 2013
Asciugamani caldo: perché non vuoi andare alla SPA senza uno!
Vuoi creare una SPA, ma non puoi decidere dove iniziare? Usare l'asciugamani caldo e in secondi si avrà una SPA e tutti gli strumenti che è necessario costruire su di esso!
Hot Towel crea un ottimo punto di partenza per la creazione di un'applicazione a pagina singola (SPA) con ASP.NET. Fuori dalla scatola offre una struttura modulare per il codice, visualizzare la navigazione, il data binding, la gestione dei dati avanzata e uno stile semplice ma elegante. L'asciugamani caldo fornisce tutto ciò che devi creare una SPA, quindi puoi concentrarsi sulla tua app, non sull'impianto idraulico.
Altre informazioni sulla creazione di una SPA dai video, esercitazioni e corsi Pluralsight di John Papa.
Struttura dell'applicazione
Hot Towel SPA fornisce una cartella app che contiene i file JavaScript e HTML che definiscono l'applicazione.
All'interno della cartella App:
- Durandal
- services
- Viewmodels
- Viste
La cartella App contiene una raccolta di moduli. Questi moduli incapsulano funzionalità e dichiarano le dipendenze su altri moduli. La cartella views contiene il codice HTML per l'applicazione e la cartella viewmodels contiene la logica di presentazione per le visualizzazioni (un modello MVVM comune). La cartella dei servizi è ideale per ospitare tutti i servizi comuni necessari all'applicazione, ad esempio il recupero dei dati HTTP o l'interazione con l'archiviazione locale. È comune che più modelli di visualizzazione usino nuovamente il codice dai moduli del servizio.
ASP.NET struttura dell'applicazione lato server MVC
Hot Towel si basa sulla struttura ASP.NET MVC familiare e potente.
- App_Start
- Content
- Controllers
- Modelli
- Script
- Visualizzazioni
Librerie in primo piano
- ASP.NET MVC
- API Web ASP.NET
- ASP.NET Ottimizzazione Web - Raggruppamento e minificazione
- Breeze.js - Gestione avanzata dei dati
- Durandal.js - composizione di spostamento e visualizzazione
- Knockout.js - Associazioni dati
- Require.js - Modularità con AMD e ottimizzazione
- Toastr.js - Messaggi popup
- Twitter Bootstrap - Stile CSS affidabile
Installazione tramite il modello di Visual Studio 2012 Hot Towel SPA
L'asciugamani caldo può essere installato come modello di Visual Studio 2012. Fare clic File
| New Project
e scegliere ASP.NET MVC 4 Web Application
. Selezionare quindi il modello 'Hot Towel Single Page Application' ed eseguire!
Installazione tramite il pacchetto NuGet
Hot Towel è anche un pacchetto NuGet che aumenta un progetto MVC vuoto esistente ASP.NET. Installare solo con Nuget e quindi eseguire!
Install-Package HotTowel
Come faccio a costruire l'asciugamani caldo?
È sufficiente iniziare ad aggiungere codice!
- Aggiungere il proprio codice lato server, preferibilmente Entity Framework e WebAPI (che funzionano davvero con Breeze.js)
- Aggiungere visualizzazioni alla
App/views
cartella - Aggiungere i modelli di visualizzazione alla
App/viewmodels
cartella - Aggiungere data binding HTML e Knockout alle nuove visualizzazioni
- Aggiornare le route di spostamento in
shell.js
Procedura dettagliata dell'HTML/JavaScript
Views/HotTowel/index.cshtml
index.cshtml è la route iniziale e la visualizzazione per l'applicazione MVC. Contiene tutti i meta tag standard, i collegamenti css e i riferimenti JavaScript previsti. Il corpo contiene un singolo <div>
elemento in cui verrà inserito tutto il contenuto (le visualizzazioni) quando vengono richieste. Usa @Scripts.Render
Require.js per eseguire il punto di ingresso per il codice dell'applicazione, contenuto nel main.js
file. Viene fornita una schermata iniziale per illustrare come creare una schermata iniziale durante il caricamento dell'app.
<body>
<div id="applicationHost">
@Html.Partial("_splash")
</div>
@Scripts.Render("~/scripts/vendor")
<script type="text/javascript" src="~/App/durandal/amd/require.js"
data-main="@Url.Content("~/App/main")"></script>
</body>
App/main.js
Il main.js
file contiene il codice che verrà eseguito non appena l'app viene caricata. Questo è il punto in cui si desidera definire le route di spostamento, impostare le visualizzazioni di avvio ed eseguire qualsiasi installazione/avviostrapping, ad esempio il priminging dei dati dell'applicazione.
Il main.js
file definisce diversi moduli durandali per facilitare l'avvio dell'applicazione. L'istruzione define consente di risolvere le dipendenze dei moduli in modo che siano disponibili per la funzione. Prima di tutto, i messaggi di debug sono abilitati, che inviano messaggi relativi agli eventi che l'applicazione esegue nella finestra della console. Il codice app.start indica al framework durandal di avviare l'applicazione. Le convenzioni vengono impostate in modo che durandal conoscono tutte le visualizzazioni e i modelli di visualizzazione siano contenuti rispettivamente nelle stesse cartelle denominate. Infine, i app.setRoot
calci caricano l'uso di un'animazione shell
predefinita entrance
.
define(['durandal/app',
'durandal/viewLocator',
'durandal/system',
'durandal/plugins/router'],
function (app, viewLocator, system, router) {
// Enable debug message to show in the console
system.debug(true);
app.start().then(function () {
router.useConvention();
viewLocator.useConvention();
//Show the app by setting the root view model for our application.
app.setRoot('viewmodels/shell', 'entrance');
});
});
Visualizzazioni
Le visualizzazioni sono disponibili nella App/views
cartella.
shell.html
Contiene shell.html
il layout master per il codice HTML. Tutte le altre visualizzazioni saranno composte da qualche parte sul lato della visualizzazione shell
. L'asciugamani caldo offre tre shell
aree di questo tipo: un'intestazione, un'area del contenuto e un piè di pagina. Ognuna di queste aree viene caricata con il modulo contenuto di altre visualizzazioni quando richiesto.
Le compose
associazioni per l'intestazione e il piè di pagina sono hard coded in Hot Towel per puntare rispettivamente alle nav
visualizzazioni e footer
. L'associazione di composizione per la sezione #content
è associata all'elemento router
attivo del modulo. In altre parole, quando si fa clic su un collegamento di spostamento viene caricata nella visualizzazione corrispondente in questa area.
<div>
<header>
<!--ko compose: {view: 'nav'} --><!--/ko-->
</header>
<section id="content" class="main container-fluid">
<!--ko compose: {model: router.activeItem,
afterCompose: router.afterCompose,
transition: 'entrance'} -->
<!--/ko-->
</section>
<footer>
<!--ko compose: {view: 'footer'} --><!--/ko-->
</footer>
</div>
nav.html
Contiene nav.html
i collegamenti di spostamento per la spa. Questa è la posizione in cui è possibile posizionare la struttura dei menu, ad esempio. Spesso si tratta di dati associati (usando Knockout) al router
modulo per visualizzare lo spostamento definito in shell.js
. Knockout cerca gli attributi di associazione dati e associa quelli shell
al modello di visualizzazione per visualizzare le route di spostamento e visualizzare una barra di avanzamento (usando Twitter Bootstrap) se il router
modulo si trova al centro della navigazione da una visualizzazione a un'altra (vedere router.isNavigating
).
<nav class="navbar navbar-fixed-top">
<div class="navbar-inner">
<a class="brand" href="/">
<span class="title">Hot Towel SPA</span>
</a>
<div class="btn-group" data-bind="foreach: router.visibleRoutes">
<a data-bind="css: { active: isActive }, attr: { href: hash }, text: name"
class="btn btn-info" href="#"></a>
</div>
<div class="loader pull-right" data-bind="css: { active: router.isNavigating }">
<div class="progress progress-striped active page-progress-bar">
<div class="bar" style="width: 100px;"></div>
</div>
</div>
</div>
</nav>
home.html e details.html
Queste visualizzazioni contengono HTML per le visualizzazioni personalizzate. Quando si fa clic sul home
collegamento nel nav
menu della visualizzazione, la home
visualizzazione verrà posizionata nell'area contenuto della shell
visualizzazione. Queste visualizzazioni possono essere aumentate o sostituite con le proprie visualizzazioni personalizzate.
footer.html
Contiene footer.html
il codice HTML visualizzato nel piè di pagina, nella parte inferiore della shell
visualizzazione.
ViewModel
ViewModels è disponibile nella App/viewmodels
cartella.
shell.js
Il shell
modello di visualizzazione contiene proprietà e funzioni associate alla shell
visualizzazione. Spesso si tratta di una posizione in cui vengono trovate le associazioni di spostamento dei menu (vedere la router.mapNav
logica).
define(['durandal/system', 'durandal/plugins/router', 'services/logger'],
function (system, router, logger) {
var shell = {
activate: activate,
router: router
};
return shell;
function activate() {
return boot();
}
function boot() {
router.mapNav('home');
router.mapNav('details');
log('Hot Towel SPA Loaded!', null, true);
return router.activate('home');
}
function log(msg, data, showToast) {
logger.log(msg, data, system.getModuleId(shell), showToast);
}
});
home.js e details.js
Questi modelli di visualizzazione contengono le proprietà e le funzioni associate alla home
vista. contiene anche la logica di presentazione per la visualizzazione ed è la colla tra i dati e la vista.
define(['services/logger'], function (logger) {
var vm = {
activate: activate,
title: 'Home View'
};
return vm;
function activate() {
logger.log('Home View Activated', null, 'home', true);
return true;
}
});
Servizi
I servizi sono disponibili nella cartella App/services. Idealmente, i servizi futuri, ad esempio un modulo del servizio dati, responsabili del recupero e della registrazione di dati remoti, potrebbero essere inseriti.
logger.js
L'asciugamani caldo fornisce un logger
modulo nella cartella dei servizi. Il logger
modulo è ideale per registrare i messaggi nella console e per l'utente in popup.