Miglioramento delle app Web con AmplifyJS

Sembra che ci sia un nuovo raccolto di librerie JavaScript per scopi speciali ogni settimana. Sono finiti, sembra, i tempi di utilizzo di una sola libreria per progetto. Oggi vi presenterò una libreria di componenti molto interessante, AmplifyJS, che offre solo alcuni componenti molto specializzati.


Devs, Incontra AmplifyJS

Secondo il sito web:

AmplifyJS è un insieme di componenti progettati per risolvere problemi di applicazioni Web comuni.

Sembra prestigioso, ma in realtà in questa biblioteca?

AmplifyJS ha tre parti principali:

  • Un'API AJAX
  • Un sistema di eventi PubSub
  • Un'API di archiviazione lato client

Unisciti a me ora per un tour nell'incredibile libreria di AmplifyJS! Costruiremo un inseguitore super-semplice dei dipendenti; in realtà, è solo un tavolo con alcune caratteristiche simili ad app, cortesia (in parte) di AmplifyJS.

Oggi non abbiamo davvero bisogno di occuparci dei problemi di stile e layout, quindi userò la libreria di Bootstrap di Twitter. È incredibilmente semplice: basta includere il collegamento al file CSS, che ti permettono di collegarti da Github e tu sei in affari.


Passaggio 1: impostarlo

Quindi, renditi una directory di progetto. Inizia con il index.html file e a js cartella. Ora vai al sito web di AmplifyJS e fai clic su questo enorme, rosso? Download? pulsante. Una volta, hai la libreria zip, estraila e spostala nel js cartella. Avremo bisogno anche di altre cose:

  • jQuery: Il componente AJAX di Amplify utilizza la funzione AJAX di jQuery sotto la sua API, almeno per impostazione predefinita. Ma useremo jQuery per altre cose, quindi portalo dentro.
  • bootstrap-modal.js: La libreria di Bootstrap di Twitter include alcuni script per ottenere tutto interattivo. E ne useremo uno: il plugin jQuery per la finestra modale. Scaricalo e aggiungilo a quello js cartella.
  • Ci sono altre due sceneggiature che menzionerò lungo la strada, ma queste scriveremo noi stessi.

Quindi, inizia il nostro index.html file come questo:

   AmplifyJS    

comandi

I dipendenti

Se non hai familiarità con l'uso di Twitter Bootstrap, vedrai che non è un problema usare. Abbiamo un contenitore è largo 940 px. Quindi, ne abbiamo due rigaS. Il primo ha una colonna, che copre tutte le 16 colonne. L'altro ha due colonne: una è larga 4 colonne e una è larga 12 colonne.

Ancora una cosa, prima di arrivare ad un vero codice: apriremo una finestra modale che consente di inserire i dipendenti. Sotto il

, aggiungi questa finestra modale HTML. Sì, sembra un sacco di codice, ma è principalmente roba da Bootstrap:

X

Aggiungi un dipendente

Va bene, siamo pronti per partire! Facciamo codice.


Passaggio 2: cablaggio della finestra modale

Apri a copione etichetta in fondo a index.html (Sto solo facendo questo inline, ma sento di metterlo in un nuovo file JS). inizia in questo modo:

 (function () var employeeModal = $ ('# add-employee-modal'). modal (backdrop: 'static'); ());

Qui stiamo usando il plugin modale Bootstrap; questo solo? istanzia? la finestra modale. Ora vogliamo che la finestra appaia quando clicchiamo su Aggiungi dipendente? pulsante. Ovviamente, dovremo prima aggiungere il pulsante: mettilo nel

, proprio sotto il

.

 

Quello data-controlli-modal = 'add-impiegato-modale' l'attributo mostrerà il modale con detto ID quando si fa clic sul pulsante.

Quindi, l'utente dovrà compilare il modulo, fare clic su? Aggiungi? pulsante che ha un ID di creare-dipendente. Quindi, colleghiamo un gestore di eventi click per il pulsante:

$ ('# create-employee'). click (function () var form = $ ('# employee-form'); employeeModal.modal ('hide'); EMPLOYEE.create (form.find ('[nome = firstName] '). val (), form.find (' [name = lastName] '). val (), form.find (' [nome = ruolo] '). val ()); form.find (' input ') .val ("););

Otteniamo il modulo e quindi nascondiamo la finestra modale. Quindi, chiameremo un EMPLOYEE.create metodo, passando il nome, il cognome e il ruolo come i tre parametri. Alla fine, cancelliamo il modulo.

amplify.publish

Ma aspetta, tu dici, cosa c'è EMPLOYEE.create? Bene, è un micro-? Classe? che ho messo dentro JS / employee.js. Controlla:

var EMPLOYEE = create: function (firstName, lastName, role) var employee = firstName: firstName, lastName: lastName, ruolo: role, dateEmployed: new Date (); amplify.publish ('dipendente creato', impiegato); restituire dipendente; ;

Dovrai lanciare un tag script per farlo apparire con gli altri.

Abbastanza semplice, vero? Creiamo solo un oggetto letterale con i nostri parametri e aggiungiamo a dateEmployed proprietà. Ma allora - e finalmente! - abbiamo il primo ingresso nel framework AmplifyJS. Qui, stiamo usando il componente pub / sotto eventi. Questo è ottimo per fare un accoppiamento lento tra parti della tua app.

Questo metodo non deve sapere se un'altra parte del nostro codice vuole fare qualcosa con ogni nuovo dipendente che creiamo; Il nostro? Aggiungi? il gestore di eventi del pulsante non deve preoccuparsene. Lo pubblicheremo semplicemente come "creato da un dipendente"? evento per ogni parte che è interessata a prendere. Passiamo il nostro nuovo oggetto dipendente come dati per chiunque sia interessato. Quindi, restituiamo l'oggetto dipendente (anche se non ne teniamo traccia nel gestore eventi).


Step 3: Reagire con amplify.subscribe

Così, è qualsiasi altra parte della nostra app interessata al? dipendente creato ?? Sì, infatti. Vogliamo fare due cose. Innanzitutto, aggiungi questo dipendente a un tavolo sulla nostra pagina. In secondo luogo, vogliamo archiviare il dipendente in localStorage. Ecco la prima parte di questo:

 amplify.subscribe ('employee-created', function (employee) employeeTable.add ([employee.firstName, employee.lastName, employee.role, employee.dateEmployed]); newAlert ('success', 'New Employee Added') ;);

Per iscriversi ad un evento, chiamiamo amplify.subscribe. Vogliamo iscriversi al? Dipendente creato ?; quando si verificano tali eventi, vogliamo aggiungerlo al employeeTable; notare che invece di limitarsi a passare il dipendente oggetto, convertiamo? a un array; questo perché abbiamo bisogno di essere sicuri che gli elementi saranno nel giusto ordine. Quindi, vogliamo visualizzare un messaggio, facendo sapere al nostro utente che il dipendente è stato aggiunto con successo.

Che succede con questo employeeTable variabile? Bene, in primo luogo, dobbiamo aggiungere il

al nostro documento. Quindi, sotto i nostri? Impiegati?

, Aggiungi questo:

Nome di battesimo Cognome Ruolo Data di lavoro

Ora, dobbiamo catturare questo tavolo come una variabile nel nostro var dichiarazione in alto:

employeeTable = TABLE.create ($ ('# employee-table'))),

E TAVOLO? Questo è l'ultimo pezzo di JS per questo puzzle. Mettilo dentro js / table.js e non dimenticare il tag dello script:

var TABLE = proto: init: function (el) this.element = $ (el) .find ('tbody'); , aggiungi: function (arr) var row = $ ('') .html (function () return $ .map (arr, function (value) return''+ valore +''; ). join (");); this.element.append (row);, load: function (rows, order) per (var i = 0; rows [i]; i ++) this.add ( rows [i]); var fields = []; for (var j = 0; order [j]; j ++) fields.push (rows [i] [order [j]]); this.add (fields );, clear: function () this.element.empty ();, create: function (el) var table = Object.create (this.proto); table.init (el); return table; ;

È un po 'complicato, ma non dovresti avere problemi a farlo. Abbiamo un proto proprietà che è il prototipo per le nostre istanze di tabella. Quindi, quando chiamiamo creare, noi usiamo Object.create per creare un oggetto che eredita da this.proto. Dopo ciò, chiamiamo il dentro metodo per impostare qualsiasi proprietà. Infine, restituiamo l'istanza della tabella.

Questa micro-API ci facilita il lavoro con il nostro tavolo. Dovresti essere in grado di vedere come passare un array al Inserisci il metodo aggiungerà una riga alla nostra tabella. Si noti inoltre che possiamo passare una serie di righe a caricare e riempire il tavolo; lo useremo presto.

Oh, poi c'è il newAlert metodo che abbiamo chiamato:

function newAlert (type, message) $ ('# alert-area'). append ($ ('

'+ messaggio +'

')); setTimeout (function () $ ('. alert-message'). fadeOut ('slow', function () this.parentNode.removeChild (this););, 2000);

Come puoi vedere, questo semplicemente aggiunge un div alla rovescia

; il nuovo div sfrutta lo stile di avviso di Bootstrap di Twitter; dopo due secondi, svaniamo l'allarme e lo rimuoviamo.

amplify.store

Ma questo non è l'unico pensiero che vogliamo fare quando il "dipendente" creato? evento si verifica:

employeeStore = amplify.store ('dipendenti') || [];

In cima, con le nostre altre due variabili, rendi la terza e ultima: employeeStore. Se amplify.store (dei dipendenti ') restituisce qualcosa, lo useremo; altrimenti, useremo un array vuoto.

amplify.subscribe ('impiegato-creato', funzione (impiegato) employeeStore.push (impiegato); amplify.store ('dipendenti', impiegatoStore););

Ora stiamo usando il componente di archiviazione di AmplifyJS. In realtà non potrebbe essere più semplice: per memorizzare un valore, passare amplify.store una chiave e il valore. Per recuperare il valore, consegnalo alla chiave. Sotto, AmplifyJS sta memorizzando quella chiave e valore in qualsiasi tipo di archiviazione disponibile su quel browser.

Quindi, qui aggiungiamo un nuovo dipendente all'array e memorizziamo l'array nei? Impiegati? chiave. Dovrei notare che poiché stiamo memorizzando un array, AmplifyJS sta usando la serializzazione JSON per convertire quell'array in una stringa. Pertanto, se stai cercando di supportare i browser senza supporto JSON nativo (IE 5 e versioni precedenti, Firefox 3 e versioni precedenti), ti consigliamo di includere la libreria json2.js.


Passaggio 4: salvataggio sul server (con amplify.request)

Nel nostro piccolo esempio di app, stiamo dicendo che, per impostazione predefinita, i dati che inserisci nell'app vengono conservati solo sul tuo computer (in quell'unico browser). Tuttavia, se l'utente vuole, gli consentiremo di metterlo sul server (ipoteticamente, si tratta di informazioni private che potrebbero non voler condividere, tuttavia, se vogliono accedervi da altri dispositivi, potrebbero farlo. ).

Inizieremo aggiungendo un pulsante per il caricamento dei dati.

Ora, naturalmente, le tue brillanti menti hanno già capito che utilizzeremo il componente AJAX di AmplifyJS. amplify.request è un'API incredibilmente flessibile e non guarderemo a tutto ciò che può fare. Tuttavia, avrai una buona sensazione di come funziona qui.

Fare AJAX con AmplifyJS è un po 'diverso rispetto ad altre librerie: l'idea è che prima si definisce una connessione al server; quindi, è possibile utilizzare quella connessione tutte le volte successive. Iniziamo definendo una connessione, chiamata "risorsa"? di AmplifyJS:

amplify.request.define ('pushData', 'ajax', url: 'data.php', digitare: 'POST');

Il primo parametro qui è ResourceId, che stiamo impostando come? pushData ?; questo è il modo in cui faremo riferimento alla nostra connessione quando la usiamo. Il secondo parametro è il tipo di richiesta; in questo caso,? ajax.? Questo è l'unico tipo di richiesta incorporato in AmplifyJS; puoi aggiungere il tuo, ma questo è adatto alle nostre esigenze di oggi.

Infine, abbiamo un oggetto opzioni. Secondo la documentazione, le tue opzioni di impostazione sono qualsiasi cosa tu possa impostare jQuery.ajax, così come nascondiglio (che consente di impostare una memoria cache personalizzata) e decoder (per analizzare la risposta AJAX). Nel nostro caso sono necessarie solo due opzioni: la url, e il genere di richiesta che stiamo facendo.

Certo, avremo bisogno di un semplice PHP sul back-end; assicurati che il dati la cartella è scrivibile.

data.php

 

Ora, che ne dici di utilizzare la connessione, la risorsa, che abbiamo definito? Bene, facciamolo in un gestore di clic per questo