Knockout.js este un cadru popular MVVM open source (MIT), creat de Steve Sandersen. Site-ul său oferă informații și demo-uri uriașe despre cum se construiesc aplicații simple, dar, din păcate, nu o face pentru aplicații mai mari. Să umplem unele dintre aceste lacune!
AMD este un format de modul JavaScript, iar unul dintre cele mai populare (dacă nu cele mai multe) cadre este http://requirejs.org de către https://twitter.com/jrburke. Se compune din două funcții globale numite require ()
și defini()
, deși require.js include, de asemenea, un fișier JavaScript de pornire, cum ar fi main.js
.
Există în primul rând două arome de requ.js: o vanilie require.js
fișier și unul care include jQuery (necesită-jquery
). În mod natural, acesta din urmă este utilizat în principal pe site-urile cu jQuery. După adăugarea unuia dintre aceste fișiere pe pagina dvs., puteți adăuga apoi următorul cod la dvs. main.js
fişier:
solicită (["https://twitter.com/jrburkeapp"], funcția (App) App.init ();)
require ()
funcția este de obicei utilizată în main.js
fișier, dar îl puteți utiliza pentru a include direct un modul oriunde. Acceptă două argumente: o listă de dependențe și o funcție de apel invers.
Funcția de apel invers se execută când toate dependențele finalizează încărcarea, iar argumentele transmise funcției de apel invers sunt obiectele necesar în matricea menționată mai sus.
Este important să rețineți că dependențele se încarcă în mod asincron. Nu toate bibliotecile sunt compatibile cu AMD, dar require.js oferă un mecanism de împingere a acelor tipuri de biblioteci astfel încât acestea să poată fi încărcate.
Acest cod necesită un modul numit aplicaţia
, care ar putea arata astfel:
define (["jquery", "ko"], functie ($, ko) var App = function () ; ););
defini()
scopul funcției este de a defini a modul. Acceptă trei argumente: numele modulului (care este tipic nu sunt incluse), o listă de dependențe și o funcție de apel invers. defini()
vă permite să separați o aplicație în mai multe module, fiecare având o funcție specifică. Acest lucru promovează decuplarea și separarea preocupărilor deoarece fiecare modul are un set propriu de responsabilități specifice.
Knockout este gata pentru AMD și se definește ca un modul anonim. Nu aveți nevoie să-l ștergeți; doar să o includeți în căile voastre. Cele mai multe plugin-uri Knockout pentru AMD sunt listate mai degrabă ca "knockout" decât "ko", dar puteți utiliza fie valoarea:
request.config (paths: ko: "vânzător / knockout-min", poștă: "vendor / postal", subliniază: "vendor / underscore-min" export: "_", amplifică: export: "amplifică", baseUrl: "/ js");
Acest cod merge în partea de sus main.js
. căi
opțiunea definește o hartă a modulelor comune care se încarcă cu un nume de cheie, spre deosebire de utilizarea întregului nume de fișier.
shim
opțiunea folosește o cheie definită în căi
și poate avea două chei speciale numite exporturi
și dependențele
. exporturi
cheia definește modul în care se întoarce modulul shimmed și dependențele
definește alte module pe care poate depinde modulul shimmed. De exemplu, shi-ul jQuery Validate ar putea să arate după cum urmează:
shim: // ... "jquery-validate": deps: ["jquery"]
Este comun să includeți tot JavaScript-ul necesar într-o aplicație cu o singură pagină. Astfel, puteți defini configurația și cerința inițială a unei aplicații de o singură pagină în main.js
ca astfel:
request.config (paths: ko: "vânzător / knockout-min", poștă: "vendor / postal", underscore: "vendor / underscore-min" export: "ko", subliniază: export: "_", amplifică: export: "amplifică", baseUrl: "/ js"); solicită (["https://twitter.com/jrburkeapp"], funcția (App) App.init ();)
S-ar putea să aveți nevoie, de asemenea, de pagini separate, care nu numai că au module specifice unei pagini, ci și un set comun de module. James Burke are două depozite care implementează acest tip de comportament.
Restul acestui articol presupune că construiți o aplicație cu mai multe pagini. Vreau să redenumesc main.js
la common.js
și include necesar require.config
în exemplul de mai sus din dosar. Aceasta este doar pentru semantică.
Acum o voi cere common.js
în fișierele mele, după cum urmează: