Knockout.js è non una libreria di animazione. Tutti gli aggiornamenti automatici di Knockout.js sono subito applicato ogni volta che i dati sottostanti cambiano. Per animare una delle sue modifiche, dobbiamo scavare nelle parti interne di Knockout.js e creare manualmente transizioni animate usando un altro framework JavaScript come jQuery o MooTools. Questa lezione si attacca alle routine di animazione di jQuery, ma i concetti presentati si applicano anche ad altre librerie di animazioni.
Per questa lezione, torneremo a una versione semplificata del nostro esempio del carrello. Crea un nuovo file HTML con i seguenti contenuti. Non faremo richieste AJAX, quindi sentiti libero di metterlo ovunque sul tuo computer. Tuttavia, utilizzeremo le routine di animazione di jQuery, quindi assicurati di includere un link alla tua copia della libreria jQuery.
Animazione di Knockout.js
Prodotto | Prezzo | |
---|---|---|
Si spera, questa è tutta la recensione ormai. Abbiamo una matrice osservabile contenente un mucchio di prodotti, a per ciascuno
associazione che visualizza ciascuno di essi e un pulsante per aggiungere più oggetti al carrello.
Knockout.js è una potente libreria dell'interfaccia utente, ma una volta combinata con le funzionalità di animazione di un framework come jQuery o MooTools, sei pronto per creare interfacce utente davvero sbalorditive con un markup minimo. Per prima cosa, daremo un'occhiata agli elenchi di animazioni, quindi la sezione successiva presenta un modo più generico per animare i componenti della vista.
Il per ciascuno
l'associazione ha due callback nominati beforeRemove
e dopo Aggiungi. Queste funzioni vengono eseguite prima che un elemento venga rimosso dall'elenco o dopo che sia stato aggiunto all'elenco, rispettivamente. Questo ci dà l'opportunità di animare ogni oggetto prima che Knockout.js manipoli il DOM. Aggiungi i callback al
Invece di una proprietà, la nostra
per ciascuno
il binding ora prende come oggetto un oggetto letterale. Il parametrodati
la proprietà punta alla matrice che si desidera eseguire il rendering e le proprietà beforeRemove e afterAdd puntano alle funzioni di callback desiderate. Successivamente, dovremmo definire questi callback sul ViewModel ShoppingCart:this.showProduct = function (element) if (element.nodeType === 1) $ (element) .hide (). fadeIn (); ; this.hideProduct = function (element) if (element.nodeType === 1) $ (element) .fadeOut (function () $ (element) .remove ();); ;Il
showProduct ()
callback usa jQuery per far sbiadire gradualmente i nuovi elementi della lista ehideProduct ()
la richiamata li sbiadisce e quindi li rimuove dal DOM. Entrambe le funzioni considerano l'elemento DOM interessato come il loro primo parametro (in questo caso, è aelemento). Le istruzioni condizionali assicurano che stiamo lavorando con un elemento a tutti gli effetti e non con un semplice nodo di testo. Il risultato finale dovrebbe essere un elenco di voci che passino gradualmente all'interno e all'esterno dell'elenco. Naturalmente, sei libero di utilizzare qualsiasi altra transizione di jQuery o eseguire una post-elaborazione personalizzata in uno dei due callback.
Binding personalizzati
Il
per ciascuno
i callback funzionano bene per animare le liste, ma sfortunatamente altri binding non forniscono questa funzionalità. Quindi, se vogliamo animare altre parti dell'interfaccia utente, dobbiamo creare costume binding che hanno l'animazione costruita direttamente su di loro.I binding personalizzati funzionano come i collegamenti predefiniti di Knockout.js. Ad esempio, considera i seguenti campi modulo:
Richiede istruzioni speciali per la movimentazione
La casella di controllo funge da interruttore per
, ma dal momento che stiamo usando il
visibile
vincolante, Knockout.js lo aggiunge o rimuove bruscamente dal DOM. Per fornire una transizione graduale per il, creeremo un binding personalizzato chiamato visibleFade:
Ovviamente, questo non funzionerà finché non aggiungiamo il binding personalizzato a Knockout.js. Possiamo farlo aggiungendo un oggetto che definisce il binding a
ko.bindingHandlers
come mostrato nel seguente codice di esempio. Questo è anche il caso in cui sono definiti anche tutti i binding integrati.ko.bindingHandlers.visibleFade = init: function (element, valueAccessor) var value = valueAccessor (); $ (Elemento) .toggle (valore ()); , update: function (element, valueAccessor) var value = valueAccessor (); valore ()? $ (elemento) .fadeIn (): $ (elemento) .fadeOut ();Il
dentro
proprietà specifica una funzione da chiamare quando Knockout.js incontra per la prima volta l'associazione. Questa callback dovrebbe definire lo stato iniziale per il componente di visualizzazione ed eseguire le necessarie azioni di impostazione (ad es., Registrazione dei listener di eventi). PervisibleFade
, tutto ciò che dobbiamo fare è mostrare o nascondere l'elemento in base allo stato di ViewModel. Lo abbiamo implementato usando il metodo toggle () di jQuery.Il
elemento
parametro è associato all'elemento DOM, evalueAccessor
è una funzione che restituirà la proprietà ViewModel in questione. Nel nostro esempio, l'elemento si riferisce aIl
aggiornare
proprietà specifica una funzione da eseguire ogni volta che le modifiche osservabili associate e la nostra callback utilizza il valore dihasInstructions
per passare il
Sommario
In questa lezione, abbiamo scoperto due metodi per animare i componenti della vista Knockout.js. Innanzitutto, abbiamo aggiunto i metodi di callback a
per ciascuno
vincolante, che ci consente di delegare l'aggiunta e la rimozione di elementi a una funzione definita dall'utente. Questo ci ha dato l'opportunità di integrare le transizioni animate di jQuery nel nostro modello Knockout.js. Quindi, abbiamo esplorato i binding personalizzati come mezzo per animare elementi arbitrari.Questa lezione ha presentato un caso di utilizzo comune per i binding personalizzati, ma non si limita affatto all'animazione dei componenti dell'interfaccia utente. I binding personalizzati possono anche essere utilizzati per filtrare i dati mentre vengono raccolti, ascoltare eventi personalizzati o creare widget riutilizzabili come griglie e contenuti paginati. Se riesci a incapsulare un comportamento in un
dentro
e una funzione di aggiornamento, puoi trasformarla in un'associazione personalizzata.
Conclusione
Questa serie copriva la stragrande maggioranza del Knockout.
Knockout.js è una pura libreria JavaScript che rende incredibilmente facile costruire interfacce utente dinamiche e incentrate sui dati. Abbiamo appreso come esporre le proprietà ViewModel utilizzando osservabili, associare elementi HTML a tali osservabili, gestire l'input dell'utente con associazioni interattive, esportare tali dati in uno script sul lato server e animare i componenti con associazioni personalizzate. Si spera che tu sia più che pronto a migrare questa conoscenza alle tue applicazioni web reali.
Questa serie copriva la maggior parte dell'API Knockout.js, ma ci sono ancora alcune sfumature da scoprire. Questi argomenti includono: collegamenti personalizzati per tipi di dati aggregati, il
valvola a farfalla
estensore per la valutazione asincrona degli osservabili calcolati e iscrizione manuale agli eventi osservabili. Tuttavia, tutti questi sono argomenti avanzati che non dovrebbero essere necessari per la tipica applicazione web. Nondimeno, Knockout.js offre una pletora di opportunità di estensibilità da esplorare.Se preferisci rileggere questa sessione in questo libro "> modulo eBook, assicurati di visitare il sito Web di Syncfusion. Inoltre, offrono una varietà di eBook gratuiti, proprio come questo!
Questa lezione rappresenta un capitolo da Knockout in modo succinto, un eBook gratuito dal team di Syncfusion.