Knockout.js este nu o bibliotecă de animație. Toate actualizările automate ale Knockout.js sunt imediat aplicată ori de câte ori se modifică datele subiacente. Pentru a anima oricare dintre modificările sale, trebuie să săpăm în interiorul lui Knockout.js și să creăm manual tranziții animate utilizând un alt cadru JavaScript, cum ar fi jQuery sau MooTools. Această lecție se îmbină cu rutinele de animație ale jQuery, dar conceptele prezentate se aplică și altor biblioteci de animație.
Pentru această lecție, vom reveni la o versiune simplificată a exemplului cartului nostru de cumpărături. Creați un nou fișier HTML cu următorul conținut. Nu vom face niciun fel de solicitări AJAX, deci nu ezitați să puneți acest lucru oriunde pe computerul dvs. Cu toate acestea, vom folosi rutinele de animație ale jQuery, așa că asigurați-vă că includeți o legătură cu copia dvs. a bibliotecii jQuery.
Animând Knockout.js
Produs | Preț | |
---|---|---|
Sperăm că totul este revizuit până acum. Avem o matrice observabilă care conține o grămadă de produse, a pentru fiecare
legare care afișează fiecare dintre ele și un buton pentru a adăuga mai multe elemente în coșul de cumpărături.
Knockout.js este o bibliotecă puternică de interfață de utilizare pe cont propriu, dar odată ce o combinați cu capabilitățile de animație ale unui cadru precum jQuery sau MooTools, sunteți gata să creați UI-uri uimitoare cu marcare minimă. În primul rând, vom examina listele de animație, iar apoi următoarea secțiune prezintă o modalitate mai generică de a anima componentele de vizualizare.
pentru fiecare
legarea are două numere de apel invocate beforeRemove
și dupăAdăugați. Aceste funcții sunt executate înainte ca un element să fie eliminat din listă sau după ce a fost adăugat în listă. Acest lucru ne oferă posibilitatea de a anima fiecare element înainte ca Knockout.js să manipuleze DOM. Adăugați apelurile înapoi la
În loc de o proprietate, noastre
pentru fiecare
legarea ia un obiect literal ca parametru al acestuia. Parametrul luidate
proprietatea indică matricea pe care doriți să o redați, iar proprietățile înainte și dupăAdăugați indică funcțiile de apel invers dorite. Apoi, ar trebui să definim aceste apelări în ShoppingCart ViewModel:this.showProduct = funcția (element) if (element.nodeType === 1) $ (element) .hide () fadeIn (); ; this.hideProduct = funcția (element) if (element.nodeType === 1) $ (element) .fadeOut (funcția () $ (element) .remove ();); ;
showProduct ()
callback utilizează jQuery pentru a face noi elemente de listă să se estompeze treptat în, șihideProduct ()
callback-ul le estompează și apoi le elimină din DOM. Ambele funcții iau elementul afectat DOM ca primul lor parametru (în acest caz, este vorba de aelement). Afirmațiile condiționale vă asigură că lucrăm cu un element cu drepturi depline și nu cu un simplu nod de text. Rezultatul final ar trebui să fie lista de elemente care trec fără probleme în și din listă. Desigur, aveți libertatea de a utiliza oricare dintre celelalte tranziții ale jQuery sau de a efectua post-procesarea personalizată în oricare dintre apelurile telefonice.
Vânzări personalizate
pentru fiecare
callbacks lucrează excelent pentru animarea listelor, dar, din păcate, alte legări nu oferă această funcție. Deci, dacă vrem să animăm alte părți ale interfeței cu utilizatorul, trebuie să creăm personalizat legături care au animația construită chiar în ele.Legarea personalizată funcționează la fel ca legările implicite ale Knockout.js. De exemplu, luați în considerare următoarele câmpuri de formular:
Necesită instrucțiuni speciale de manipulare
Caseta de validare acționează ca o comutare pentru
, dar din moment ce folosim
vizibil
legat, Knockout.js adaugă brusc sau îl elimină din DOM. Pentru a asigura o tranziție lină pentru, vom crea o legare personalizată numită visibleFade:
Desigur, acest lucru nu va funcționa până când nu adăugăm legarea personalizată la Knockout.js. Putem face acest lucru prin adăugarea unui obiect care definește legarea
ko.bindingHandlers
așa cum se arată în următoarea eșantion de cod. Acest lucru se întâmplă de asemenea în cazul în care sunt definite toate legăturile încorporate.ko.bindingHandlers.visibleFade = init: funcție (element, valueAccessor) var value = valueAccessor (); $ (Elementul) .toggle (valoare ()); , actualizare: funcție (element, valoareAccessor) var value = valueAccessor (); valoare ()? $ (element) .fadeIn (): $ (element) .fadeOut ();
init
proprietatea specifică o funcție de a apela când Knockout.js întâlnește întâi legarea. Acest apel de apel trebuie să definească starea inițială a componentei de vizualizare și să efectueze acțiunile de configurare necesare (de exemplu, înregistrarea ascultătorilor de evenimente). PentruvisibleFade
, tot ce trebuie să faceți este să arătați sau să ascundeți elementul bazat pe starea modelului ViewModel. Am implementat acest lucru folosind metoda jQuery () switch ().
element
parametrul este elementul DOM fiind legat șivalueAccessor
este o funcție care va returna proprietatea ViewModel în cauză. În exemplul nostru, elementul se referă la
Actualizați
proprietatea specifică o funcție care trebuie executată ori de câte ori modificările observabile asociate și apelul nostru de apel utilizează valoareahasInstructions
pentru a trece de la
rezumat
În această lecție am descoperit două metode de animare a componentelor de vizualizare Knockout.js. În primul rând, am adăugat metode de apel invers la
pentru fiecare
legare, care permite delegarea adăugării și eliminării elementelor la o funcție definită de utilizator. Acest lucru ne-a oferit posibilitatea de a integra tranzițiile animate ale jQuery în șablonul Knockout.js. Apoi, am explorat legăturile personalizate ca mijloc de animare a elementelor arbitrare.Această lecție a prezentat un caz comun de utilizare a legărilor personalizate, dar acestea nu se limitează la animarea componentelor UI. Legăturile personalizate pot fi, de asemenea, folosite pentru filtrarea datelor în timp ce sunt colectate, pentru a asculta evenimente personalizate sau pentru a crea widget-uri reutilizabile, cum ar fi grilele și conținutul paginat. Dacă puteți încapsula un comportament într-un
init
și o funcție de actualizare, o puteți transforma într-o obligație personalizată.
Concluzie
Această serie a acoperit marea majoritate a knockout-ului.
Knockout.js este o bibliotecă JavaScript pură, care face incredibil de ușor să construiți interfețe dinamice, orientate spre date. Am învățat cum să expunem proprietățile ViewModel folosind observabile, să legăm elementele HTML la acele observabile, să gestionăm intrarea utilizatorilor cu legături interactive, să exportim aceste date într-un script de pe server și să animăm componente cu legături personalizate. Sperăm că sunteți mai mult decât gata să migrați aceste cunoștințe la aplicațiile web din lumea reală.
Această serie acoperă marea majoritate a API-ului Knockout.js, dar există încă o serie de nuanțe rămase de descoperit. Aceste subiecte includ: legături personalizate pentru tipurile de date agregate,
regulator
extender pentru evaluarea asincronă a observabilelor calculate și abonarea manuală la evenimentele observabile. Cu toate acestea, toate acestea sunt subiecte avansate care nu ar trebui să fie necesare pentru aplicația web tipică. Cu toate acestea, Knockout.js oferă o mulțime de oportunități de extensibilitate pentru explorarea dvs..Dacă preferați să citiți din nou această sesiune în această carte "> eBook, asigurați-vă că ați verificat site-ul Syncfusion. În plus, acestea oferă o varietate de cărți electronice gratuite, la fel ca aceasta!
Această lecție reprezintă un capitol din Knockout Succinct, o carte electronică gratuită de la echipa de la Syncfusion.