Animazione del Knockout

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.


Ritorno del carrello

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.


Elenco di callback

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 elemento così:

 

Invece di una proprietà, la nostra per ciascuno il binding ora prende come oggetto un oggetto letterale. Il parametro dati 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 e hideProduct () 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, è a elemento). 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