Freigeben über


Hot Towel-Vorlage

von Mads Kristensen

Die Hot Towel MVC-Vorlage wurde von John Papa geschrieben

Wählen Sie die version aus, die heruntergeladen werden soll:

Heißtuch-MVC-Vorlage für Visual Studio 2012

Heißhandtuch-MVC-Vorlage für Visual Studio 2013

Heißes Handtuch: Weil Sie nicht ohne ins SPA gehen möchten!

Möchten Sie eine SPA erstellen, können aber nicht entscheiden, wo Sie beginnen sollen? Verwenden Sie Hot Towel und in Sekunden haben Sie ein SPA und alle Tools, die Sie benötigen, um darauf zu bauen!

Hot Towel bietet einen hervorragenden Ausgangspunkt für die Erstellung einer Single Page Application (SPA) mit ASP.NET. Standardmäßig bietet es eine modulare Struktur für Ihren Code, die Ansichtsnavigation, Datenbindung, umfassende Datenverwaltung und einfache, aber elegante Formatierung. Hot Towel bietet alles, was Sie zum Erstellen eines SPA benötigen, sodass Sie sich auf Ihre App konzentrieren können, nicht auf die Sanitäranlagen.

Erfahren Sie mehr über das Erstellen eines SPA in Den Videos, Tutorials und Pluralsight-Kursen von John Papa.

Anwendungsstruktur

Hot Towel SPA stellt einen App-Ordner bereit, der die JavaScript- und HTML-Dateien enthält, die Ihre Anwendung definieren.

Im Ordner App:

  • durandal
  • services
  • Viewmodels
  • views

Der Ordner App enthält eine Sammlung von Modulen. Diese Module kapseln Die Funktionalität und deklarieren Abhängigkeiten von anderen Modulen. Der Ordner views enthält den HTML-Code für Ihre Anwendung, und der Ordner viewmodels enthält die Präsentationslogik für die Ansichten (ein gängiges MVVM-Muster). Der Ordner "Dienste" eignet sich ideal für alle gängigen Dienste, die Ihre Anwendung möglicherweise benötigt, z. B. HTTP-Datenabruf oder Interaktion mit lokalem Speicher. Es ist üblich, dass mehrere Viewmodels Code aus den Dienstmodulen wiederverwenden.

ASP.NET serverseitige MVC-Anwendungsstruktur

Hot Towel baut auf der vertrauten und leistungsstarken ASP.NET MVC-Struktur auf.

  • App_Start
  • Inhalt
  • Controller
  • Modelle
  • Skripts
  • Ansichten

Installation über die Visual Studio 2012 Hot Towel SPA-Vorlage

Hot Towel kann als Visual Studio 2012-Vorlage installiert werden. Klicken Sie einfach, File | New Project und wählen Sie aus.ASP.NET MVC 4 Web Application Wählen Sie dann die Vorlage "Hot Towel Single Page Application" aus, und führen Sie aus!

Installation über das NuGet-Paket

Hot Towel ist auch ein NuGet-Paket, das ein vorhandenes leeres ASP.NET MVC-Projekt erweitert. Installieren Sie einfach mithilfe von Nuget, und führen Sie dann aus!

Install-Package HotTowel

Wie baue ich heißes Handtuch?

Beginnen Sie einfach mit dem Hinzufügen von Code!

  1. Fügen Sie Ihren eigenen serverseitigen Code hinzu, vorzugsweise Entity Framework und WebAPI (die mit Breeze.js wirklich glänzen)
  2. Hinzufügen von App/views Ansichten zum Ordner
  3. Hinzufügen von Viewmodels zum App/viewmodels Ordner
  4. Hinzufügen von HTML- und Knockout-Datenbindungen zu Ihren neuen Ansichten
  5. Aktualisieren der Navigationsrouten in shell.js

Exemplarische Vorgehensweise für HTML/JavaScript

Views/HotTowel/index.cshtml

index.cshtml ist die Startroute und -ansicht für die MVC-Anwendung. Sie enthält alle Standardmetatags, CSS-Links und JavaScript-Verweise, die Sie erwarten würden. Der Textkörper enthält eine Einzelne <div> , in der alle Inhalte (Ihre Ansichten) platziert werden, wenn sie angefordert werden. Der @Scripts.Render verwendet Require.js, um den Einstiegspunkt für den Code der Anwendung auszuführen, der in der main.js Datei enthalten ist. Ein Begrüßungsbildschirm wird bereitgestellt, um zu veranschaulichen, wie Sie einen Begrüßungsbildschirm erstellen, während Ihre App geladen wird.

<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

Die main.js Datei enthält den Code, der ausgeführt wird, sobald Ihre App geladen wird. Hier möchten Sie Ihre Navigationsrouten definieren, Ihre Startansichten festlegen und alle Setup-/Bootstrapping-Aktionen durchführen, z. B. das Priming der Anwendungsdaten.

Die main.js Datei definiert mehrere durandal-Module, um den Start der Anwendung zu unterstützen. Die define-Anweisung hilft beim Auflösen der Modulabhängigkeiten, sodass sie für die Funktion verfügbar sind. Zunächst werden die Debugnachrichten aktiviert, die Nachrichten über die von der Anwendung ausgeführten Ereignisse an das Konsolenfenster senden. Der code app.start weist durandal framework an, die Anwendung zu starten. Die Konventionen werden so festgelegt, dass durandal weiß, dass alle Ansichten und Ansichtsmodelle in denselben benannten Ordnern enthalten sind. Schließlich lädt die app.setRoot Kicks die shell mithilfe einer vordefinierten entrance Animation.

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');
    });
});

Ansichten

Ansichten befinden sich im App/views Ordner.

shell.html

Enthält shell.html das master Layout für Ihren HTML-Code. Alle Ihre anderen Ansichten werden an einer Seite ihrer shell Ansicht zusammengesetzt. Hot Towel bietet drei shell solche Regionen: eine Kopfzeile, einen Inhaltsbereich und eine Fußzeile. Jede dieser Regionen wird mit Inhalten aus anderen Ansichten geladen, wenn sie angefordert werden.

Die compose Bindungen für Kopf- und Fußzeile sind in Hot Towel hart codiert, um auf die Ansichten bzwfooter. auf die nav Ansichten zu verweisen. Die Compose-Bindung für den Abschnitt #content ist an das aktive Element des router Moduls gebunden. Anders ausgedrückt: Wenn Sie auf einen Navigationslink klicken, wird die entsprechende Ansicht in diesem Bereich geladen.

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

Enthält nav.html die Navigationslinks für den SPA. Hier kann beispielsweise die Menüstruktur platziert werden. Häufig ist dies datengebunden (mit Knockout) an das router Modul, um die Navigation anzuzeigen, die Sie in definiert haben shell.js. Knockout sucht nach den Datenbindungsattributen und bindet diese an das shell Viewmodel, um die Navigationsrouten anzuzeigen und eine Fortschrittsleiste anzuzeigen (mithilfe von Twitter Bootstrap), wenn sich das router Modul gerade in der Navigation von einer Ansicht zur anderen befindet (siehe 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 und details.html

Diese Ansichten enthalten HTML für benutzerdefinierte Ansichten. Wenn auf den home Link im Menü der nav Ansicht geklickt wird, wird die home Ansicht im Inhaltsbereich der shell Ansicht platziert. Diese Ansichten können durch Ihre eigenen benutzerdefinierten Ansichten erweitert oder ersetzt werden.

footer.html

Enthält footer.html HTML, das in der Fußzeile am unteren Rand der shell Ansicht angezeigt wird.

ViewModels

ViewModels befinden sich im App/viewmodels Ordner.

shell.js

Das shell Viewmodel enthält Eigenschaften und Funktionen, die an die shell Ansicht gebunden sind. Häufig werden hier die Menünavigationsbindungen gefunden (siehe Logik router.mapNav ).

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 und details.js

Diese Ansichtsmodelle enthalten die Eigenschaften und Funktionen, die an die home Ansicht gebunden sind. Es enthält auch die Präsentationslogik für die Ansicht und ist der Klebstoff zwischen den Daten und der Ansicht.

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;
    }
});

Dienste

Dienste befinden sich im Ordner App/services. Idealerweise könnten Ihre zukünftigen Dienste wie ein Dataservice-Modul, das für das Abrufen und Veröffentlichen von Remotedaten zuständig ist, platziert werden.

logger.js

Hot Towel stellt ein logger Modul im Dienstordner bereit. Das logger Modul eignet sich ideal zum Protokollieren von Nachrichten in der Konsole und für den Benutzer in Popup-Popups.