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.
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.
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
I stedet for en eiendom, vår
for hver
bindende tar nå et objekt bokstavelig som parameter. Parameteren erdata
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, oghideProduct ()
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 aelement). 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
, men siden vi bruker
synlig
bindende, legger Knockout.js bratt til eller fjerner det fra DOM. For å gi en jevn overgang for, vi lager en tilpasset binding som kalles visibleFade:
Selvfølgelig vil dette ikke fungere før vi legger til den egendefinerte bindingen til Knockout.js. Vi kan gjøre dette ved å legge til et objekt som definerer bindingen til
ko.bindingHandlers
som vist i følgende kodeprøve. Dette skjer også hvor alle de innebygde bindingene er definert også.ko.bindingHandlers.visibleFade = init: funksjon (element, valueAccessor) var value = valueAccessor (); $ (Element) .toggle (verdi ()); , oppdatering: funksjon (element, valueAccessor) var value = valueAccessor (); verdi ()? $ (element) .fadeIn (): $ (element) .fadeOut ();De
i det
Egenskapen spesifiserer en funksjon som skal ringes når Knockout.js møter bindingen først. Denne tilbakeringingen skal definere starttilstanden for visningskomponenten og utføre nødvendige oppsetthandlinger (for eksempel registrering av hendelseslyttere). TilvisibleFade
, alt vi trenger å gjøre er å vise eller skjule elementet basert på tilstanden til ViewModel. Vi implementerte dette ved hjelp av jQuery's toggle () metode.De
element
parameter er DOM-elementet bundet, ogvalueAccessor
er en funksjon som returnerer egenskapen ViewModel. I vårt eksempel refererer element tilDe
Oppdater
Egenskapen spesifiserer en funksjon som skal utføres når den tilknyttede observerbare endringer, og vår tilbakeringing bruker verdien avhasInstructions
å overgå
Sammendrag
I denne leksjonen oppdaget vi to metoder for å animere Knockout.js-visningskomponenter. Først lagde vi tilbakekallingsmetoder til
for hver
bindende, som lar oss delegere tillegg og fjerning av elementer til en brukerdefinert funksjon. Dette ga oss muligheten til å integrere jQuery's animerte overganger i vår Knockout.js-mal. Deretter undersøkte vi tilpassede bindinger som et middel til å animere vilkårlig elementer.Denne leksjonen presenterte en vanlig brukstilfelle for egendefinerte bindinger, men de er på ingen måte begrenset til animerende brukergrensesnitt. Tilpassede bindinger kan også brukes til å filtrere data etter hvert som det samles inn, lytte etter egendefinerte hendelser, eller lage gjenbrukbare widgets som grids og paged content. Hvis du kan inkapslere en oppførsel til en
i det
og en oppdateringsfunksjon, kan du gjøre det til en tilpasset binding.
Konklusjon
Denne serien dekket det store flertallet av Knockout.
Knockout.js er et rent JavaScript-bibliotek som gjør det utrolig enkelt å bygge dynamiske, datasentriske brukergrensesnitt. Vi lærte å eksponere ViewModel-egenskaper ved å bruke observerbare data, binde HTML-elementer til de observerbare dataene, administrere brukerinngang med interaktive bindinger, eksportere dataene til et server-side-skript og animere komponenter med tilpassede bindinger. Forhåpentligvis er du mer enn klar til å migrere denne kunnskapen til dine virkelige webapplikasjoner.
Denne serien dekket det store flertallet av Knockout.js API, men det er fortsatt en rekke nyanser igjen for å oppdage. Disse temaene inkluderer: egendefinerte bindinger for aggregerte datatyper,
Gasspedal
utvider for asynkron evaluering av beregnede observerbare data, og manuelt abonnerer på en observerbar begivenhet. Men alle disse er avanserte emner som ikke burde være nødvendige for den typiske webapplikasjonen. Ikke desto mindre gir Knockout.js en mengde utvidelsesmuligheter for deg å utforske.Hvis du foretrekker å lese denne sesjonen i denne boken "> eBok-skjema, må du sjekke ut Syncfusion's nettsted. I tillegg tilbyr de en rekke gratis eBøker, akkurat som denne!
Denne leksjonen representerer et kapittel fra Knockout Succinctly, en gratis eBok fra teamet på Syncfusion.