Knockout.js is niet een animatiebibliotheek. Alle automatische updates van Knockout.js zijn per direct toegepast wanneer de onderliggende gegevens veranderen. Om veranderingen te animeren, moeten we de internals van Knockout.js verkennen en handmatig geanimeerde overgangen maken met een ander JavaScript-framework zoals jQuery of MooTools. Deze les blijft hangen in de animatieroutines van jQuery, maar de gepresenteerde concepten zijn ook van toepassing op andere animatiebibliotheken.
Voor deze les keren we terug naar een vereenvoudigde versie van ons winkelwagenvoorbeeld. Maak een nieuw HTML-bestand met de volgende inhoud. We zullen geen AJAX-verzoeken doen, dus voel je vrij om dit overal op je computer te plaatsen. We zullen echter de animatieroutines van jQuery gebruiken, dus zorg ervoor dat u een link opneemt naar uw exemplaar van de jQuery-bibliotheek.
Knockout.js animeren
Artikel | Prijs | |
---|---|---|
Hopelijk is dit nu allemaal een recensie. We hebben een waarneembare array met een reeks producten, een foreach
binding die elk ervan weergeeft, en een knop om meer items aan het winkelwagentje toe te voegen.
Knockout.js is een krachtige bibliotheek voor gebruikersinterfaces op zich, maar als je het eenmaal combineert met de animatiemogelijkheden van een framework zoals jQuery of MooTools, ben je klaar om echt verbluffende UI's te maken met minimale markup. Eerst kijken we naar animatielijsten en in de volgende sectie wordt een algemenere manier weergegeven om beeldcomponenten te animeren.
De foreach
binding heeft twee callbacks met de naam beforeRemove
en na toevoegen. Deze functies worden uitgevoerd voordat een item uit de lijst wordt verwijderd of nadat het aan de lijst is toegevoegd. Dit geeft ons de mogelijkheid om elk item te animeren voordat Knockout.js de DOM manipuleert. Voeg de callbacks toe aan de
In plaats van een eigendom, onze
foreach
binding neemt nu een object letterlijk als parameter. De parameter'sgegevens
eigenschap verwijst naar de array die u wilt renderen en de eigenschappen beforeRemove en afterAdd verwijzen naar de gewenste callback-functies. Vervolgens moeten we deze callbacks definiëren in het ShoppingCart ViewModel:this.showProduct = function (element) if (element.nodeType === 1) $ (element) .hide (). fadeIn (); ; this.hideProduct = function (element) if (element.nodeType === 1) $ (element) .fadeOut (function () $ (element) .remove ();); ;De
showProduct ()
callback gebruikt jQuery om nieuwe lijstitems geleidelijk uit te laten faden, en dehideProduct ()
callback vervaagt ze en verwijdert ze vervolgens uit de DOM. Beide functies nemen het getroffen DOM-element als hun eerste parameter (in dit geval is het eenelement). De voorwaardelijke instructies zorgen ervoor dat we werken met een volwaardig element en niet alleen maar een tekstknooppunt. Het eindresultaat zou lijstitems moeten zijn die vloeiend overgaan in en uit de lijst. Natuurlijk bent u vrij om alle andere overgangen van jQuery te gebruiken of aangepaste nabewerking uit te voeren in een van de callbacks.
Aangepaste bindingen
De
foreach
callbacks werken prima voor het animeren van lijsten, maar helaas bieden andere bindingen deze functionaliteit niet. Dus, als we andere delen van de gebruikersinterface willen animeren, moeten we creëren gewoonte bindingen waarvan de animatie is ingebouwd.Aangepaste bindingen werken net zoals de standaard bindingen van Knockout.js. Bekijk bijvoorbeeld de volgende formuliervelden:
Vereist speciale gebruiksinstructies
Het selectievakje fungeert als een schakelaar voor de
, maar omdat we de gebruiken
zichtbaar
binding, Knockout.js voegt het abrupt toe of verwijdert het van de DOM. Voor een soepele overgang zorgen voor de, we maken een aangepaste binding genaamd visibleFade:
Dit werkt natuurlijk niet totdat we de aangepaste binding toevoegen aan Knockout.js. We kunnen dit doen door een object toe te voegen dat de binding definieert
ko.bindingHandlers
zoals getoond in het volgende codevoorbeeld. Dit gebeurt toevallig ook waar alle ingebouwde bindingen zijn gedefinieerd.ko.bindingHandlers.visibleFade = init: function (element, valueAccessor) var value = valueAccessor (); $ (Element) .toggle (waarde ()); , update: function (element, valueAccessor) var value = valueAccessor (); waarde() ? $ (element) .fadeIn (): $ (element) .fadeOut ();De
in het
eigenschap geeft een functie aan die moet worden aangeroepen wanneer Knockout.js voor het eerst de binding tegenkomt. Deze callback moet de initiële status voor de weergavecomponent definiëren en de nodige instellingsacties uitvoeren (bijvoorbeeld het registreren van gebeurtenislisteners). VoorvisibleFade
, alles wat we moeten doen is het element tonen of verbergen op basis van de staat van het ViewModel. We hebben dit geïmplementeerd met de toggle () -methode van jQuery.De
element
parameter is het DOM-element dat wordt gebonden, envalueAccessor
is een functie die de betreffende ViewModel-eigenschap retourneert. In ons voorbeeld verwijst element naarDe
bijwerken
eigenschap geeft een uit te voeren functie aan wanneer de bijbehorende waarneembare veranderingen optreden en onze callback de waarde van gebruikthasInstructions
om de
Samenvatting
In deze les hebben we twee methoden voor het animeren van Knockout.js weergavecomponenten ontdekt. Eerst hebben we callback-methoden toegevoegd aan de
foreach
binding, waarmee we de toevoeging en verwijdering van items aan een door de gebruiker gedefinieerde functie delegeren. Dit gaf ons de mogelijkheid om de geanimeerde overgangen van jQuery te integreren in onze Knockout.js-sjabloon. Vervolgens verkenden we aangepaste bindingen als middel om willekeurige elementen te animeren.Deze les presenteerde een algemene gebruikscasus voor aangepaste bindingen, maar deze zijn in geen geval beperkt tot het animeren van UI-componenten. Aangepaste bindingen kunnen ook worden gebruikt om gegevens te filteren terwijl deze worden verzameld, naar aangepaste gebeurtenissen te luisteren of om herbruikbare widgets zoals rasters en pagina-inhoud te maken. Als je een gedrag kunt inkapselen in een
in het
en een updatefunctie, je kunt er een aangepaste binding van maken.
Conclusie
Deze serie omvatte de overgrote meerderheid van de Knockout.
Knockout.js is een pure JavaScript-bibliotheek die het ongelooflijk eenvoudig maakt om dynamische, datacentrische gebruikersinterfaces te bouwen. We hebben geleerd om ViewModel-eigenschappen bloot te leggen met waarnemingen, HTML-elementen aan die waarnemingen te binden, gebruikersinvoer te beheren met interactieve bindingen, die gegevens naar een server-side script te exporteren en componenten met aangepaste bindings te animeren. Hopelijk bent u meer dan klaar om deze kennis te migreren naar uw echte webtoepassingen.
Deze serie omvat de overgrote meerderheid van de API Knockout.js, maar er zijn nog een aantal nuances te ontdekken. Deze onderwerpen omvatten: aangepaste bindingen voor geaggregeerde gegevenstypen, de
smoorklep
extender voor asynchrone evaluatie van berekende observables en handmatig inschrijven op waarneembare gebeurtenissen. Dit zijn echter allemaal geavanceerde onderwerpen die niet noodzakelijk zouden moeten zijn voor de typische webtoepassing. Niettemin biedt Knockout.js een overvloed aan uitbreidingsmogelijkheden die je kunt verkennen.Als u deze sessie liever opnieuw leest in dit boek "> eBook-formulier, moet u de website van Syncfusion bekijken. Bovendien bieden ze een verscheidenheid aan gratis eBooks, net als deze!
Deze les vertegenwoordigt een hoofdstuk van Knockout bondig, een gratis eBoek van het team van Syncfusion.