Îmbunătățirea aplicațiilor Web cu AmplifyJS

Se pare că există o nouă recoltă de biblioteci JavaScript cu destinație specială în fiecare săptămână. Se pare că sunt zilele în care se folosește o singură bibliotecă pe proiect. Astăzi vă prezint o bibliotecă de componente foarte amplă, AmplifyJS, care oferă doar câteva componente foarte specializate.


Devs, întâlniți AmplifyJS

Potrivit site-ului:

AmplifyJS este un set de componente concepute pentru a rezolva problemele comune ale aplicațiilor web.

Sună prestigios, dar ce este de fapt în această bibliotecă?

AmplifyJS are trei piese principale:

  • Un AJAX API
  • Un sistem de evenimente PubSub
  • Un API de stocare pe partea clientului

Alăturați-vă acum pentru un tur al incredibilei biblioteci AmplifyJS! Vom construi un tracker foarte simplu de angajați; într-adevăr, este doar un tabel cu câteva caracteristici asemănătoare aplicațiilor, amabil (parțial) de AmplifyJS.

Nu avem nevoie să ne preocupăm astăzi de aspectele legate de stil și aspect, așa că am să folosesc biblioteca Twitter Bootstrap. Este incredibil de simplu: trebuie doar să includeți legătură la fișierul CSS - pe care l-au lăsat să fiți conectați de la Github - și sunteți în afaceri.


Pasul 1: Configurarea acestuia

Deci, fă-ți un director de proiect. Începeți cu index.html fișier și a js pliant. Acum, du-te pe site-ul AmplifyJS și faceți clic pe care uriașe, roșu? buton. Odată, aveți zipul bibliotecii, extrageți-l și mutați-l în js pliant. Vom avea nevoie și de alte câteva lucruri:

  • jQuery: Componenta AJAX a lui Amplify folosește funcția jQuery AJAX sub API-ul său, cel puțin implicit. Dar vom folosi jQuery pentru alte lucruri, așa că adu-l înăuntru.
  • bootstrap-modal.js: Biblioteca Twitter Bootstrap include câteva scripturi pentru a obține toate informațiile interactive. Și vom folosi unul: plugin-ul jQuery al ferestrei modale. Descărcați-l și adăugați-l la acesta js pliant.
  • Există alte două scripturi pe care le voi menționa pe parcurs, dar acestea le vom scrie.

Apoi, începeți-ne index.html fișier ca acesta:

   AmplifyJS    

comenzi

Angajați

Dacă nu sunteți familiarizat cu utilizarea Twitter Bootstrap, veți vedea că nu este o sudoare de utilizat. Avem o recipient care are o lățime de 940 pixeli. Apoi, avem două rânds. Primul are o coloană care acoperă toate cele 16 coloane. Celălalt are două coloane: una este de 4 coloane, iar una are 12 coloane.

Încă un lucru, înainte de a ajunge la o codare reală: vom deschide o fereastră modală care să permită accesul angajaților. Sub

, adăugați această fereastră modală HTML. Da, se pare că este vorba de o mulțime de cod, dar sunt în principal chestii Bootstrap:

X

Adăugați un angajat

În regulă, suntem gata să plecăm! Să codificăm.


Pasul 2: Cablarea ferestrei modale

Deschideți a scenariu eticheta din partea de jos a paginii index.html (Fac doar asta in linie, dar simt ca o sa pun intr-un nou fisier JS). începeți astfel:

 (funcția () var employeeModal = $ ('add-employee-modal').

Folosim modul plugin Bootstrap mod aici; aceasta doar? fereastra modală. Acum, dorim ca fereastra să apară când facem clic pe "Adăugați angajați"? buton. Desigur, va trebui să adăugăm mai întâi butonul: puneți acest lucru în

, chiar sub

.

 

Acea date-controale-modal = 'add-angajat-modal' atributul va afișa modulul cu ID-ul menționat atunci când este apăsat butonul.

Deci, utilizatorul va trebui să completeze formularul, dați clic pe butonul? Adăugați? butonul care are un ID de creați-angajat. Deci, hai să facem un buton pentru un eveniment de clic:

$ ('# create-employee') faceți clic pe (funcția () var form = $ (' ]]) val (), form.find ('[name = lastName]') val (), form.find ('[name = role] ') .val ("););

Obținem formularul, apoi ascundem fereastra modală. Apoi o să sunăm EMPLOYEE.create metoda, trecând primul nume, prenumele și rolul ca fiind cei trei parametri. În cele din urmă, eliminăm formularul.

amplify.publish

Dar așteptați, spuneți, ce este EMPLOYEE.create? Ei bine, este o clasă micro-? pe care l-am pus js / employee.js. Verifică:

var EMPLOYEE = create: funcția (numeName, NumeNumăr, Rolul) var employee = firstName: firstName, lastName: lastName, role: role, dateEmployed: new Date (); amplify.publish ("angajat creat", angajat); angajat retur; ;

Veți dori să aruncați o etichetă de scenariu cu ceilalți.

Destul de simplu, nu? Noi doar creăm un obiect literal cu parametrii noștri și adăugăm a dateEmployed proprietate. Dar, atunci - și în final - avem prima intrare a cadrului AmplifyJS. Aici, folosim componenta evenimente publice / sub evenimente. Acest lucru este minunat pentru a face o legătură slabă între părțile aplicației dvs..

Această metodă nu trebuie să știe dacă o altă parte a codului nostru dorește să facă ceva cu fiecare nou angajat pe care îl creăm; Noastră? Butonul de gestionare a evenimentului nu trebuie să vă faceți griji. O vom publica doar ca un "angajat" creat? eveniment pentru orice parte interesată. Transmitem noul obiect angajat ca date pentru oricine interesat. Apoi, returnați obiectul angajat (chiar dacă nu îl urmărim în cadrul procesorului nostru de evenimente).


Pasul 3: Reacționarea cu amplify.subscribe

Asa de, este orice altă parte a aplicației noastre interesată de "angajatul-creat"? Da, de fapt. Vrem să facem două lucruri. Mai întâi, adăugați acest angajat la un tabel de pe pagina noastră. În al doilea rând, dorim să stocăm angajatul în localStorage. Iată prima parte a acestui lucru:

 amplify.subscribe ("angajat-creat", funcție (angajat) employeeTable.add ([employee.firstName, employee.lastName, employee.role, employee.dateEmployed]); newAlert ('succes', 'New Employee Added') ;);

Pentru a vă abona la un eveniment, sunăm amplify.subscribe. Vrem să vă abonați la "angajatul creat"; atunci când apar evenimentele, vrem să le adăugăm la employeeTable; observați că, în loc să îl treceți doar angajat obiect, noi? converti? la o matrice; acest lucru se datorează faptului că trebuie să fim siguri că elementele vor fi în ordinea corectă. Apoi, dorim să afișăm un mesaj, permițând utilizatorilor să știe că angajatul a fost adăugat cu succes.

Ce e cu asta? employeeTable variabil? Ei bine, în primul rând, trebuie să adăugăm

la documentul nostru. Deci, sub angajații noștri??

, adaugă asta:

Nume Numele de familie Rol Data angajat

Acum, trebuie să capturăm acest tabel ca o variabilă în cadrul nostru var declarație în partea de sus:

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

Și MASA? Aceasta este ultima piesă de JS pentru acest puzzle. Pune-o înăuntru js / table.js și nu uitați tag-ul script:

var TABLE = proto: init: funcția (el) this.element = $ (el) .find ('tbody'); , adăugați: funcția (arr) var row = $ ('') .html (funcția () return $ .map (arr, funcția (valoare) return''+ valoare +'„; ;); this.element.append (rând);, sarcina: funcția (rânduri, ordine) pentru (var i = 0; ()); vară câmpuri = []; pentru var j = 0; ordine [j]; j ++) fields.push (rânduri [i] );, clare: function () this.element.empty ();, crea: function (el) var tab = Object.create (this.proto); table.init; ;

E un pic cam complicat, dar nu ar trebui să ai probleme cu grotele. Avem o proto proprietate care este prototipul instanțelor noastre de masă. Atunci când sunăm crea, folosim Object.create pentru a crea un obiect care moștenește this.proto. După aceea, sunăm init pentru a stabili orice proprietăți. În cele din urmă, vom returna instanța tabelului.

Acest micro-API ne ușurează să lucrăm cu masa noastră. Ar trebui să puteți vedea modul în care treceți o matrice la adăuga metoda va adăuga un rând la masa noastră. Observați, de asemenea, că putem trece o serie de rânduri sarcină și umpleți masa; vom folosi acest lucru în curând.

Atunci, acolo este newAlert metoda pe care am numit-o:

funcția newAlert (tip, mesaj) $ ('alert-area') append ($ ('

'+ message +'

„)); () () () () () () () () () ().

După cum puteți vedea, aceasta doar adaugă a div pe dos

; noul div profită de stilul alertei Twitter Bootstrap; după două secunde, ieșim din alertă și o eliminăm.

amplify.store

Dar asta nu este singura idee pe care o dorim sa o facem atunci cand "angajatul" a fost creat? apare:

employeeStore = amplify.store ("angajați") || [];

În partea de sus, cu celelalte două variabile, facem al treilea și ultimul: employeeStore. Dacă amplify.store ( 'angajați') întoarce ceva, vom folosi asta; în caz contrar, vom folosi o matrice goală.

amplify.subscribe ("angajat-creat", funcție (angajat)) employeeStore.push (angajat); amplify.store ("employees', employeeStore););

Acum folosim componenta de stocare AmplifyJS. Chiar nu a putut fi mai simplu: pentru a stoca o valoare, treci amplify.store o cheie și o valoare. Pentru a extrage valoarea, dați-i cheia. Dedesubt, AmplifyJS stochează acea cheie și valoare în orice tip de stocare disponibil pe acel browser.

Deci, aici, adăugăm un nou angajat la matrice și stocăm matricea în angajații? cheie. Trebuie să rețin că din moment ce stocăm o matrice, AmplifyJS folosește serializarea JSON pentru a converti matricea la un șir. Prin urmare, dacă încercați să sprijiniți browserele fără suport JSON nativ (IE 5 și în jos, Firefox 3 și în jos), veți dori să includeți biblioteca json2.js.


Pasul 4: Salvarea pe server (cu amplify.request)

În exemplul mic al aplicației, spunem că, în mod prestabilit, datele pe care le puneți în aplicație sunt păstrate numai pe computerul dvs. (în acel browser). Cu toate acestea, dacă utilizatorul dorește, le vom permite să le punem pe server (ipotetic, acestea sunt informații private pe care nu le doresc să le împărtășească, însă dacă doresc să le acceseze de pe alte dispozitive, ar putea face acest lucru. ).

Vom începe prin adăugarea unui buton pentru încărcarea datelor.

Acum, bineînțeles, mințile voastre strălucite au dat deja seama că vom folosi componenta AJAX a lui AmplifyJS. amplify.request este un API incredibil de flexibil și nu ne vom uita la tot ce poate face. Cu toate acestea, veți avea o senzație bună despre modul în care funcționează aici.

Făcând AJAX cu AmplifyJS este un pic diferit față de alte biblioteci: ideea este că mai întâi definiți o conexiune la server; atunci puteți utiliza acea conexiune de nenumărate ori după aceea. Să începem prin definirea unei conexiuni, numită "resursă"? de AmplifyJS:

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

Primul parametru este aici RESOURCEID, pe care le setăm ca "pushData"; acesta este modul în care ne vom referi la conexiunea noastră atunci când îl folosim. Al doilea parametru este tipul de solicitare; în acest caz, ajax.? Acesta este singurul tip de cerere încorporat în AmplifyJS; puteți adăuga propria dvs., dar acest lucru este potrivit pentru nevoile noastre astăzi.

În cele din urmă, avem un obiect de opțiuni. Conform documentației, opțiunile de setări sunt tot ce ați seta jQuery.ajax, precum și ascunzătoare (care vă permite să configurați o memorie cache memorie personalizată) și decodor (pentru parsarea răspunsului AJAX). În cazul nostru, sunt necesare doar două opțiuni: URL-ul, si tip de cerere pe care o facem.

Bineînțeles, vom avea nevoie de un simplu PHP pe spate; asigurați-vă că date dosarul este scris.

data.php

 

Acum, ce zici de folosirea conexiunii, a resurselor pe care le-am definit? Să facem asta într-un manipulator de clicuri pentru asta