Modèle Hot Towel
par Mads Kristensen
Le modèle Hot Towel MVC est écrit par John Papa
Choisissez la version à télécharger :
Modèle Hot Towel MVC pour Visual Studio 2012
Modèle Hot Towel MVC pour Visual Studio 2013
Serviette chaude: Parce que vous ne voulez pas aller au SPA sans un!
Vous souhaitez créer un SPA, mais vous ne pouvez pas décider par où commencer ? Utilisez Hot Towel et en quelques secondes, vous aurez un SPA et tous les outils dont vous avez besoin pour construire dessus!
Hot Towel crée un excellent point de départ pour la création d’une application monopage (SPA) avec ASP.NET. Il fournit une structure modulaire pour votre code, la navigation d’affichage, la liaison de données, la gestion riche des données et un style simple mais élégant. Hot Towel fournit tout ce dont vous avez besoin pour construire un SPA, afin que vous puissiez vous concentrer sur votre application, pas sur la plomberie.
Apprenez-en davantage sur la création d’un SPA à partir des vidéos, tutoriels et cours Pluralsight de John Papa.
Structure d'application
Hot Towel SPA fournit un dossier d’application qui contient les fichiers JavaScript et HTML qui définissent votre application.
Dans le dossier Application :
- Durandal
- services
- viewmodels
- views
Le dossier App contient une collection de modules. Ces modules encapsulent des fonctionnalités et déclarent des dépendances sur d’autres modules. Le dossier views contient le code HTML de votre application et le dossier viewmodels contient la logique de présentation des vues (un modèle MVVM courant). Le dossier services est idéal pour héberger tous les services courants dont votre application peut avoir besoin, tels que la récupération de données HTTP ou l’interaction de stockage local. Il est courant que plusieurs modèles d’affichage réutilisent le code des modules de service.
ASP.NET structure d’application côté serveur MVC
Hot Towel s’appuie sur la structure MVC ASP.NET familière et puissante.
- App_Start
- Contenu
- Controllers
- Modèles
- scripts ;
- Les vues
Bibliothèques proposées
- ASP.NET MVC
- API Web ASP.NET
- optimisation web ASP.NET - regroupement et minification
- Breeze.js - gestion riche des données
- Durandal.js - navigation et composition d’affichage
- Knockout.js - liaisons de données
- Require.js - Modularité avec AMD et optimisation
- Toastr.js - messages contextuels
- Twitter Bootstrap - style CSS robuste
Installation via le modèle SPA Hot Towel de Visual Studio 2012
Hot Towel peut être installé en tant que modèle Visual Studio 2012. Cliquez simplement sur File
| New Project
et choisissez .ASP.NET MVC 4 Web Application
Sélectionnez ensuite le modèle « Application monopage Hot Towel » et exécutez !
Installation via le package NuGet
Hot Towel est également un package NuGet qui augmente un projet MVC ASP.NET vide existant. Installez simplement à l’aide de Nuget, puis exécutez!
Install-Package HotTowel
Comment construire sur une serviette chaude ?
Commencez simplement à ajouter du code !
- Ajoutez votre propre code côté serveur, de préférence Entity Framework et WebAPI (qui brillent vraiment avec Breeze.js)
- Ajouter des vues au
App/views
dossier - Ajouter des viewmodels au
App/viewmodels
dossier - Ajouter des liaisons de données HTML et Knockout à vos nouvelles vues
- Mettre à jour les itinéraires de navigation dans
shell.js
Procédure pas à pas du code HTML/JavaScript
Views/HotTowel/index.cshtml
index.cshtml est la route et la vue de départ de l’application MVC. Il contient toutes les balises meta standard, les liens CSS et les références JavaScript que vous attendez. Le corps contient un seul <div>
qui est l’endroit où tout le contenu (vos vues) sera placé lorsqu’ils sont demandés. Utilise @Scripts.Render
Require.js pour exécuter le point d’entrée du code de l’application, contenu dans le main.js
fichier. Un écran de démarrage est fourni pour montrer comment créer un écran de démarrage pendant le chargement de votre application.
<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>
Application/main.js
Le main.js
fichier contient le code qui s’exécutera dès que votre application est chargée. C’est là que vous souhaitez définir vos itinéraires de navigation, définir vos vues de démarrage et effectuer toute configuration/démarrage, comme l’amorçage des données de votre application.
Le main.js
fichier définit plusieurs modules de durandal pour aider l’application à démarrer. L’instruction define permet de résoudre les dépendances de modules afin qu’elles soient disponibles pour la fonction. Tout d’abord, les messages de débogage sont activés, ce qui envoie des messages sur les événements que l’application effectue à la fenêtre de console. Le code app.start indique au framework durandal de démarrer l’application. Les conventions sont définies afin que durandal sache que toutes les vues et les modèles d’affichage sont contenus dans les mêmes dossiers nommés, respectivement. Enfin, le app.setRoot
kicks charge le à l’aide shell
d’une animation prédéfinie 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');
});
});
Les vues
Les vues se trouvent dans le App/views
dossier .
shell.html
contient shell.html
la disposition master pour votre code HTML. Toutes vos autres vues seront composées quelque part de côté de votre shell
vue. Hot Towel fournit un shell
avec trois régions de ce type : un en-tête, une zone de contenu et un pied de page. Chacune de ces régions est chargée avec le contenu d’autres affichages lorsque demandé.
Les compose
liaisons pour l’en-tête et le pied de page sont codées en dur dans Hot Towel pour pointer vers les nav
vues et footer
, respectivement. La liaison de composition pour la section #content
est liée à l’élément router
actif du module. En d’autres termes, lorsque vous cliquez sur un lien de navigation, l’affichage correspondant est chargé dans cette zone.
<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
contient nav.html
les liens de navigation pour le SPA. C’est là que la structure de menu peut être placée, par exemple. Il s’agit souvent de données liées (à l’aide de Knockout) au router
module pour afficher la navigation que vous avez définie dans .shell.js
Knockout recherche les attributs de liaison de données et les lie au shell
viewmodel pour afficher les itinéraires de navigation et afficher une barre de progression (à l’aide de Twitter Bootstrap) si le router
module est en train de naviguer d’une vue à l’autre (voir 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 et details.html
Ces vues contiennent du code HTML pour les vues personnalisées. Lorsque vous cliquez sur le home
lien dans le nav
menu de l’affichage, l’affichage home
est placé dans la zone de contenu de l’affichage shell
. Ces vues peuvent être augmentées ou remplacées par vos propres vues personnalisées.
footer.html
contient du footer.html
code HTML qui s’affiche dans le pied de page, en bas de la shell
vue.
ViewModels
Les viewModels se trouvent dans le App/viewmodels
dossier .
shell.js
Le shell
viewmodel contient des propriétés et des fonctions liées à la shell
vue. Souvent, c’est là que se trouvent les liaisons de navigation de menu (voir la router.mapNav
logique).
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 et details.js
Ces viewmodels contiennent les propriétés et les fonctions liées à la home
vue. il contient également la logique de présentation de la vue et constitue le lien entre les données et la vue.
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;
}
});
Services
Les services se trouvent dans le dossier App/services. Dans l’idéal, vos futurs services, tels qu’un module de service de données, chargé de l’obtention et de la publication des données distantes, pourraient être placés.
logger.js
Hot Towel fournit un logger
module dans le dossier services. Le logger
module est idéal pour la journalisation des messages dans la console et à l’utilisateur dans des toasts contextuels.