Knockout.js est un framework JavaScript MVVM Open Source (MIT) populaire, créé par Steve Sandersen. Son site Web fournit d'excellentes informations et des démonstrations sur la manière de créer des applications simples, mais malheureusement, il ne le fait pas pour les applications plus volumineuses. Comblons certaines de ces lacunes!
AMD est un format de module JavaScript et l'un des frameworks les plus populaires (sinon le plus) est http://requirejs.org by https://twitter.com/jrburke. Il se compose de deux fonctions globales appelées exiger()
et définir()
, Bien que require.js intègre également un fichier JavaScript de démarrage, tel que main.js
.
Il existe principalement deux versions de require.js: une vanille require.js
fichier et celui qui inclut jQuery (require-jquery
). Naturellement, ce dernier est principalement utilisé dans les sites Web activés pour jQuery. Après avoir ajouté l’un de ces fichiers à votre page, vous pouvez ensuite ajouter le code suivant à votre main.js
fichier:
require (["https://twitter.com/jrburkeapp"], fonction (App) App.init ();)
le exiger()
la fonction est généralement utilisée dans le main.js
fichier, mais vous pouvez l’utiliser pour inclure directement un module n’importe où. Il accepte deux arguments: une liste de dépendances et une fonction de rappel.
La fonction de rappel s'exécute lorsque le chargement de toutes les dépendances est terminé et les arguments transmis à la fonction de rappel sont les objets. Champs obligatoires dans le tableau susmentionné.
Il est important de noter que les dépendances se chargent de manière asynchrone. Toutes les bibliothèques ne sont pas compatibles AMD, mais require.js fournit un mécanisme permettant de cerner ces types de bibliothèques afin qu'elles puissent être chargées..
Ce code nécessite un module appelé app
, qui pourrait ressembler à ceci:
define (["jquery", "ko"], fonction ($, ko) var App = function () ; App.prototype.init = function () // INIT TOUT CE QUI SUIT; retourne une nouvelle App ( ););
le définir()
Le but de la fonction est de définir un module. Il accepte trois arguments: le nom du module (qui est typiquement non inclus), une liste de dépendances et une fonction de rappel. le définir()
fonction vous permet de séparer une application en plusieurs modules, chacun ayant une fonction spécifique. Cela favorise le découplage et la séparation des préoccupations, car chaque module a son propre ensemble de responsabilités spécifiques..
Knockout est prêt pour AMD et se définit comme un module anonyme. Vous n'avez pas besoin de le crier; il suffit de l'inclure dans vos chemins. La plupart des plugins Knockout prêts pour AMD le nomment "knockout" plutôt que "ko", mais vous pouvez utiliser l'une des valeurs suivantes:
require.config (chemins: ko: "vendeur / knockout-min", postal: "vendeur / postal", trait de soulignement: "vendeur / underscore-min", amplifie: "vendeur / amplifie", shim: soulignement: exports: "_", amplify: exports: "amplify", baseUrl: "/ js");
Ce code va au sommet de main.js
. le les chemins
L'option définit un mappage de modules communs chargés avec un nom de clé plutôt que le nom de fichier complet..
le cale
option utilise une clé définie dans les chemins
et peut avoir deux touches spéciales appelées exportations
et deps
. le exportations
key définit ce que le module shimmed renvoie, et deps
définit d'autres modules dont dépend le module shimmed. Par exemple, la cale de jQuery Validate pourrait ressembler à ceci:
shim: //… "jquery-validate": deps: ["jquery"]
Il est courant d'inclure tout le code JavaScript nécessaire dans une application à une seule page. Ainsi, vous pouvez définir la configuration et le besoin initial d’une application à page unique dans main.js
ainsi:
require.config (chemins: ko: "vendeur / knockout-min", postal: "vendeur / postal", trait de soulignement: "vendeur / underscore-min", amplifier: "vendeur / amplifier", shim: ko: exports: "ko", trait de soulignement: exports: "_", amplifier: exports: "amplifier", baseUrl: "/ js"); require (["https://twitter.com/jrburkeapp"], fonction (App) App.init ();)
Vous aurez peut-être également besoin de pages distinctes contenant non seulement des modules spécifiques à une page, mais également un ensemble commun de modules. James Burke a deux référentiels qui implémentent ce type de comportement.
Le reste de cet article suppose que vous construisez une application de plusieurs pages. Je vais renommer main.js
à common.js
et inclure le nécessaire require.config
dans l'exemple ci-dessus dans le fichier. C'est purement pour la sémantique.
Maintenant, je vais avoir besoin common.js
dans mes fichiers, comme ceci: