Knockout.js è un popolare framework MVVM JavaScript open source (MIT), creato da Steve Sandersen. Il suo sito Web offre grandi informazioni e dimostrazioni su come creare semplici applicazioni, ma sfortunatamente non lo fa per le applicazioni più grandi. Completiamo alcune di queste lacune!
AMD è un formato di modulo JavaScript e uno dei framework più popolari (se non il più) è http://requirejs.org da https://twitter.com/jrburke. Consiste di due funzioni globali chiamate richiedere()
e definire()
, sebbene require.js incorpori anche un file JavaScript iniziale, come main.js
.
Ci sono principalmente due versioni di require.js: una vaniglia require.js
file e uno che include jQuery (require-jquery
). Naturalmente, quest'ultimo è utilizzato prevalentemente nei siti Web abilitati a jQuery. Dopo aver aggiunto uno di questi file alla tua pagina, puoi aggiungere il seguente codice al tuo main.js
file:
require (["https://twitter.com/jrburkeapp"], function (App) App.init ();)
Il richiedere()
la funzione è tipicamente usata nel main.js
file, ma puoi usarlo per includere direttamente un modulo ovunque. Accetta due argomenti: un elenco di dipendenze e una funzione di callback.
La funzione di callback viene eseguita quando tutte le dipendenze finiscono il caricamento e gli argomenti passati alla funzione di callback sono gli oggetti necessario nella matrice di cui sopra.
È importante notare che le dipendenze vengono caricate in modo asincrono. Non tutte le librerie sono compatibili con AMD, ma require.js fornisce un meccanismo per ridurre questi tipi di librerie in modo che possano essere caricate.
Questo codice richiede un modulo chiamato App
, che potrebbe apparire come il seguente:
define (["jquery", "ko"], function ($, ko) var App = function () ; App.prototype.init = function () // INIT ALL TEH THINGS; return new App ( ););
Il definire()
Lo scopo della funzione è definire a modulo. Accetta tre argomenti: il nome del modulo (che è tipicamente non incluso), un elenco di dipendenze e una funzione di callback. Il definire()
funzione consente di separare un'applicazione in molti moduli, ciascuno con una funzione specifica. Ciò promuove il disaccoppiamento e la separazione delle preoccupazioni poiché ogni modulo ha il proprio insieme di responsabilità specifiche.
Knockout è pronto per AMD e si definisce come un modulo anonimo. Non hai bisogno di spingerlo; includilo nei tuoi percorsi. La maggior parte dei plug-in Knockout predisposti per AMD lo elencano come "knockout" piuttosto che "ko", ma puoi utilizzare entrambi i valori:
require.config (percorsi: ko: "venditore / knockout-min", postale: "fornitore / postale", trattino basso: "fornitore / trattino basso-min", amplificare: "fornitore / amplificatore", spessore: carattere di sottolineatura: exports: "_", amplify: exports: "amplify", baseUrl: "/ js");
Questo codice è in cima a main.js
. Il percorsi
opzione definisce una mappa di moduli comuni che vengono caricati con un nome chiave anziché utilizzare l'intero nome del file.
Il shim
l'opzione utilizza una chiave definita in percorsi
e può avere due chiavi speciali chiamate esportazioni
e dipendenze
. Il esportazioni
key definisce cosa restituisce il modulo shimmed e dipendenze
definisce altri moduli da cui potrebbe dipendere il modulo shimmed. Ad esempio, lo shim di jQuery Validate potrebbe essere simile al seguente:
shim: // ... "jquery-validate": deps: ["jquery"]
È comune includere tutto il codice JavaScript necessario in un'applicazione a singola pagina. Pertanto, è possibile definire la configurazione e il requisito iniziale di un'applicazione a pagina singola in main.js
così:
require.config (percorsi: ko: "venditore / knockout-min", postale: "fornitore / postale", trattino basso: "fornitore / trattino basso-min", amplificare: "fornitore / amplificatore", shim: ko: exports: "ko", trattino basso: exports: "_", amplifica: exports: "amplify", baseUrl: "/ js"); require (["https://twitter.com/jrburkeapp"], function (App) App.init ();)
Potresti anche aver bisogno di pagine separate che non hanno solo moduli specifici per la pagina, ma condividono un insieme comune di moduli. James Burke ha due repository che implementano questo tipo di comportamento.
Il resto di questo articolo presuppone che tu stia creando un'applicazione multi-pagina. Rinominerò main.js
a common.js
e includere il necessario require.config
nell'esempio sopra nel file. Questo è puramente per la semantica.
Ora ho bisogno common.js
nei miei file, in questo modo: