Animarea knockout-ului

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.


Întoarcerea coșului de cumpărături

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.


Listează apelurile înapoi

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 element ca acesta:

 

În loc de o proprietate, noastre pentru fiecare legarea ia un obiect literal ca parametru al acestuia. Parametrul lui date 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, și hideProduct () 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 a element). 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