Animerer Knockout

Knockout.js er ikke et animasjonsbibliotek. Alle Knockout.js automatiske oppdateringer er umiddelbart brukes når de underliggende dataene endres. For å animere noen av endringene, må vi grave inn i Knockout.js 'internals og manuelt opprette animerte overganger ved hjelp av et annet JavaScript-rammeverk som jQuery eller MooTools. Denne leksjonen stikker sammen med jQuerys animasjonsrutiner, men de fremlagte konseptene gjelder også for andre animasjonsbiblioteker.


Retur av handlekurven

For denne leksjonen kommer vi tilbake til en forenklet versjon av vår handlevogneksempel. Opprett en ny HTML-fil med følgende innhold. Vi vil ikke gjøre noen AJAX-forespørsler, så vær så snill å sette dette overalt på datamaskinen din. Vi vil imidlertid bruke jQuery's animasjonsrutiner, så vær sikker på å inkludere en kobling til din kopi av jQuery-biblioteket.

   Animerer Knockout.js     

Produkt Pris

Forhåpentligvis er dette hele gjennomgå nå. Vi har et observerbart utvalg som inneholder en rekke produkter, a for hver bindende som viser hver enkelt av dem, og en knapp for å legge til flere varer i handlekurven.


Oppgi tilbakeringinger

Knockout.js er et kraftig brukergrensesnittbibliotek på egenhånd, men når du kombinerer det med animasjonsfunksjonene til et rammeverk som jQuery eller MooTools, er du klar til å lage virkelig fantastiske brukergrensesnitt med minimal oppslag. Først tar vi en titt på animasjonslister, og neste del presenterer en mer generell måte å animere visningskomponenter på.

De for hver bindende har to tilbakekallinger kalt beforeRemove og afterAdd. Disse funksjonene utføres før et element fjernes fra listen, eller etter at det er lagt til i henholdsvis listen. Dette gir oss muligheten til å animere hvert element før Knockout.js manipulerer DOM. Legg tilbakeringingene til element som slik:

 

I stedet for en eiendom, vår for hver bindende tar nå et objekt bokstavelig som parameter. Parameteren er data Egenskapen peker på matrisen du vil gjengi, og egenskapene beforeRemove and afterAdd peker til de ønskede tilbakeringingsfunksjonene. Deretter skal vi definere disse tilbakekallingene på ShoppingCart ViewModel:

 this.showProduct = function (element) if (element.nodeType === 1) $ (element) .hide (). fadeIn (); ; this.hideProduct = function (element) if (element.nodeType === 1) $ (element) .fadeOut (funksjon () $ (element) .remove ();); ;

De showProduct () tilbakeringing bruker jQuery til å gjøre nye listeposter gradvis fade inn, og hideProduct () tilbakeringing fader dem ut, og fjerner dem fra DOM. Begge funksjonene tar det berørte DOM-elementet som sin første parameter (i dette tilfellet er det a element). De betingede utsagnene sørger for at vi jobber med et fullverdig element og ikke bare en tekstknute.

Sluttresultatet bør være listeposter som jevnt overgår til og ut av listen. Selvfølgelig er du fri til å bruke noen av jQuery's andre overganger eller utføre egendefinert etterbehandling i noen av tilbakekallingene.


Tilpassede bindinger

De for hver tilbakeringinger fungerer bra for animerende lister, men dessverre gir andre bindinger ikke denne funksjonaliteten. Så, hvis vi ønsker å animere andre deler av brukergrensesnittet, må vi lage tilpasset bindinger som har animasjonen bygget rett inn i dem.

Tilpassede bindinger fungerer som Knockout.js standardbindinger. For eksempel, vurder følgende skjemafelter:

 

Krever spesielle håndteringsanvisninger

Boksen fungerer som en veksle for