Comment créer un projet de base dactylographié en utilisant jQuery, Requerjs, et KnockoutJS

j'ai été à la recherche d'un simple how-to, pour créer l'exemple le plus basique D'un projet typographique Visual Studio 2012 utilisant Requerjs, jQuery, et KnockoutJS. Il y a plusieurs exemples disponibles, mais pour moi certains sont plus compliqués que je ne le voulais, alors j'ai entrepris de créer un guide pratique, et je l'ai affiché ici pour un examen public. J'ai répondu à ma propre question dans le cadre d'un exercice de partage des connaissances.

pour ceux qui ne sont pas familiers, voici une brève analyse de la composants inclus...

dactylographié - une extension Visual Studio qui permet de créer un script .TS fichier via un langage qui est un super-ensemble de JavaScript. Cela permet de définir un type de données associé à des méthodes et à des variables - qui est absent de JavaScript. Ce faisant, les vérifications de temps de compilation peuvent assurer l'utilisation appropriée dans une tentative de réduire les conflits d'exécution. Lors de la construction du projet de studio visuel, L'extension du studio visuel compilez le script en JavaScript réel. En tant que tel, cette extension est livrée avec son propre compilateur - tsc.EXE. On s'attend à ce que les fichiers JavaScript résultants soient déployés en production, et non pas le code source .les fichiers ts.

jQuery - un framework JavaScript pour la traversée et la manipulation de documents HTML, le traitement d'événements, l'animation et l'interaction Ajax.

RequireJS - Chargeur de dépendances. Parfois, les références JavaScript peuvent devenir folles. Ce les tentatives pour aider à ces préoccupations. Mon exemple montre que même si de nombreux fichiers JavaScript sont utilisés, le HTML ne fait référence qu'à un seul - le fichier JavaScript racine qui charge les autres.

KnockoutJS - l'INTERFACE utilisateur de liaison, en utilisant le pattern MVVM. Les vues HTML se réfèrent aux variables et aux méthodes dans un view-model. Le modèle de vue est un objet JavaScript (le fichier JavaScript est probablement le résultat de la compilation d'un .fichier ts - voir texte dactylographié surtout.)

DefinitelyTyped - sont également inclus deux paquets NuGet DefinitelyTyped. Comme TypeScript tente de vérifier l'utilisation des types de données, il effectue une vérification pour s'assurer qu'il est au courant de toutes les références. JavaScript est un peu plus lâche que ça. Afin de satisfaire les caractères typographiques (lorsque nous nous référons à des objets JavaScript externes), nous avons besoin d'un moyen de décrire (à dactylographier) les objets que nous nous attendons à être utilisés. Ces scripts de type DefinitelyTyped fournissent cette définition. Ils ne fournissent aucune fonctionnalité, juste de la clarté au compilateur dactylographique pour qu'il puisse effectuer ces vérifications.

Dans l'exemple ci-dessous, vous verrez

/// <reference path="../Scripts/typings/requirejs/require.d.ts" />

C'est de cette façon que le compilateur TypeScript inclura le fichier de définition défini par definitelytyped. L'organisation qui crée ces scripts de type DefinitelyTyped a créé une vaste collection. Nous nous référons ici à seulement deux-KnockoutJS, et RequireJS (bien, parce que c'est la portée de ce tutoriel)

17
demandé sur barrypicker 2014-09-19 03:56:43

1 réponses

Avertissement

Ce sera show "a" façon de construire un site Web de base en utilisant TypeScript, jQuery, KnockoutJS, et Requerjs. Il existe de nombreuses autres façons de le faire.

Pour Commencer

Installer Visual Studio Extension

installer Visual Studio 2012 extension-TypeScript pour Microsoft Visual Studio 2012 PowerTool 1.0.1.0 http://visualstudiogallery.msdn.microsoft.com/ac357f1e-9847-46ac-a4cf-520325beaec1


Créer un nouveau Projet Visual Studio

  • Démarrez visual studio 2012.
  • sélectionner l'élément du menu"le Fichier" ->"" ->"Projet..."
  • Accédez à "Modèles" ->"Autres Langues" ->" dactylographié" (ce réellement crée un fichier de projet avec l'extension .csproj - bizarre)
  • choisir le type de projet "HTML Application with TypeScript"

Nettoyage

Supprimer le fichier app.CSS, app.ts du projet


Ajouter Des Composants

en utilisant NuGet, add...

  • RequireJS(j'ai choisi la version 2.1.15 pour ce tutoriel)
  • KnockoutJS (j'ai choisi la version 3.2.0 pour ce tutoriel)
  • jQuery (j'ai choisi la version 2.1.1 Pour ce tutoriel)
  • requirejs.Tapuscrit.DefinitelyTyped(j'ai choisi la version 0.2.0

    Jason Jarrett pour ce tutoriel. il a installé un fichier DEF dactylographié by Josh Baldwin-version 2.1.8)
  • ko.Tapuscrit.DefinitelyTyped(j'ai choisi la version 0.5.7 par

    Jason Jarrett pour ce tutoriel)

Configuration Des Dossiers De Projet

Créer des dossiers de projet à la racine du projet

  • Application
  • Modèles
  • Viewmodel

Créer une base de Tapuscrit modèle

Ajouter un fichier dactylographié au dossier de projet "Models"

  • cliquez avec le bouton droit de la souris sur le dossier "Models" l'Explorateur de solutions
  • menu contextuel élément "Ajouter" - > " Nouvel élément..."
  • dans le volet de gauche, surlignez " Visual C#"
  • dans le volet de droite, mettez en surbrillance "fichier dactylographié"
  • dans la zone de texte Nom du fichier, entrez " myTestModel.ts", Cliquez sur le bouton "Ajouter"

modifier le fichier " myTestModel.ts"

class myTestModel {
    public fieldZ: string;
    public fieldY: string;
    public fieldX: number;
}
export=myTestModel;

Créer un Tapuscrit vue-modèle

Ajouter un fichier dactylographié au dossier du projet "Viewmodel"

  • cliquez avec le bouton droit de la souris sur le dossier "ViewModels" dans L'Explorateur de solutions
  • menu contextuel élément "Ajouter" - > " Nouvel élément..."
  • dans le volet de gauche, surlignez " Visual C#"
  • dans le volet de droite, mettez en surbrillance "fichier dactylographié"
  • dans la zone de texte Nom du fichier, entrez " myViewModel.ts"
  • Cliquez sur le bouton "Ajouter"

modifier le fichier myViewModel.ts...

/// <reference path="../Scripts/typings/knockout/knockout.d.ts" />

import myTestModel = require("Models/myTestModel");
import ko = require("knockout");

class myViewModel {
    public myString: KnockoutObservable<string>;
    public myNumber: KnockoutObservable<number>;
    public myComplexObject: KnockoutObservable<myTestModel>;

    constructor() {
        this.myString = ko.observable("some test data");
        this.myNumber = ko.observable(987);

        var tempComplexObject = new myTestModel;
        tempComplexObject.fieldZ = "some bogus test data";
        tempComplexObject.fieldY = "another bogus test data";
        tempComplexObject.fieldX = 123;

        this.myComplexObject = ko.observable(tempComplexObject);
    }

    myButton_Click() {
        alert("I was clicked");
    }
}
export=myViewModel;

Ajouter configuration

ajouter le fichier de configuration Requerjs

  • clic droit sur le dossier de projet "Application" dans L'Explorateur de solutions
  • menu contextuel élément "Ajouter" - > " Nouvel élément..."
  • dans le volet de gauche, surlignez " Visual C#"
  • dans le volet de droite, mettez en surbrillance "fichier dactylographié"
  • dans la zone de texte Nom du fichier, entrez "require-config.ts"
  • Cliquez sur le bouton "Ajouter"

Modifier le fichier "exiger le-config.ts"

/// <reference path="../Scripts/typings/requirejs/require.d.ts" />

require.config({
    baseUrl: "",
    paths: {
        "jQuery": "Scripts/jquery-2.1.1",
        "knockout": "Scripts/knockout-3.2.0.debug",
        "myViewModel": "ViewModels/myViewModel"
    },
    shim: {
        "jQuery": {
            exports: "$"
        }
    },
});

require(["jQuery"], function ($) {
    $(document).ready(function () {
        require(["knockout", "myViewModel"], (knockout, myViewModel) => {
            var viewModel = new myViewModel;
            knockout.applyBindings(viewModel);
        });
    });
});

modifier l'index des fichiers existants.html

Besoin d'aligner la vue avec le modèle de vue.

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>TypeScript HTML App</title>
        <script data-main="Application/require-config" src="Scripts/require.js"></script>
    </head>
    <body>
        <h1>TypeScript HTML App</h1>

        <div id="myStringTest" data-bind="text: myString"></div>
        <input id="myStringTest2" data-bind="value: myString" />
        <input id="myNumberTest" data-bind="value: myNumber" />
        <input id="myComplexObjectTest" data-bind="value: myComplexObject().fieldZ" />
        <button id="myMethodTest" data-bind="click: myButton_Click" >click me</button>
    </body>
</html>

Exécuter

OK - le temps de donner un essai. Terminé, mettez quelques points de rupture dans le .les fichiers ts, et appuyez sur F5.


Conclusion:

Comme vous pouvez le voir, il n'y a pas beaucoup de code dans l'exemple. Si vous exécutez l'exemple, et cliquez sur le bouton que vous trouverez le bouton indice.html est lié à une méthode dans myViewModel.il s'appelle myButton_Click. En outre, la zone de texte myStringTest2, et myNumberTest sont liés aux variables définies dans le modèle de vue.

Les config.ts fichier contient la liste des dépendances qui sont connectées. La ligne "knock-out.applyBindings (viewModel)" associe l'instance de myViewModel à la vue html.

notez comment le caractère typographique permet de déclarer des variables avec un type de données?

j'espère que ce guide vous aide. Le simple fait de poser plusieurs pièces sur la table m'a aidé à visualiser comment ces composants jouent ensemble. KnockoutJS a quelques plug-ins cool - tels que knockout-mapping - qui permet aux données extraites d'un service web d'être directement lié au modèle de vue sans transformation intermédiaire ou de traduction. En outre, knockoutjs peut prendre en charge templating - probablement pour que les pages maître puissent être implémentées.

pour être complet, je vais ajouter un dossier de projet appelé Views, et tenir mon html là. Je pense que c'est plus traditionnel pour le développement MVC/MVVM. L'url ayant .html me harcèle encore. J'aime le routage de style MVC (pas d'extension de fichier), mais c'est assez cool aussi - surtout depuis son rien plus que HTML et JavaScript - vraiment plate-forme cross. Mis à part les appels des services web (non inclus dans l'exemple), il n'y a pas de postbacks, le traitement côté client est rapide.

n'hésitez pas à commenter...

37
répondu barrypicker 2014-09-19 15:49:04