O introducere în Handlebars

Dacă datele site-ului dvs. se modifică în mod regulat, atunci vă recomandăm să aruncați o privire la Handlebars. Handlebars este un procesor șablon care generează în mod dinamic pagina dvs. HTML, economisind timp pentru a efectua actualizări manuale. În acest tutorial, vă prezint pe Handlebars și vă învăț cum să creați un șablon de bază pentru site-ul dvs..


Șablon de site

Există două motive principale pentru care doriți să creați un șablon pentru site-ul dvs. Mai întâi de toate, construirea unui șablon vă încurajează să separați codul bazat pe logică din vizualizarea reală, ajutându-vă să aderați la un model de vizualizare / control. În al doilea rând, șabloanele mențin codul dvs. curat și întreținut, ceea ce, la rândul său, face ca procesul de actualizare a site-ului dvs. să fie o briză. Nu creați un site cu Handlebars. În schimb, creați linii directoare și structuri care dictează modul în care ar trebui să pară site-ul fără a se concentra asupra datelor unei pagini. Să acoperim unele dintre elementele de bază.


Cele elementare

Handlebars generează codul dvs. HTML, luând o structură JSON și executându-l printr-un șablon. Aceste șabloane sunt scrise în cea mai mare parte în cod HTML obișnuit și sunt împodobite cu substituenți care vă permit să injectați date, după cum este necesar. De exemplu, următorul șablon întâmpină utilizatorul când se conectează:

Bun venit înapoi, name

Nume atributul este locul în care numele utilizatorului va fi injectat în pagină. Acest substituent corespunde cu o proprietate din structura JSON a datelor. Acesta este cel mai simplu exemplu posibil, dar veți observa în curând că orice altceva se reduce în mod esențial la acest concept simplu. Hai să mergem la manipularea magistralelor.

Arrays

Handlebars vine cu unele ajutoare încorporate pentru a vă ajuta să lucrați cu date mai complexe. Unul dintre acești ajutoare este fiecare ajutor. Acest helper iterează printr-o matrice și vă permite să creați elemente HTML dinamice, pe elemente de matrice. De exemplu, următorul șablon afișează datele unui matrice care conține o listă a concertelor locale care se joacă în zona mea:

 #în fiecare Concerte  /fiecare 
Concerte locale
acest

După cum puteți vedea, acest cod este mult mai curat decât codul convențional, cum ar fi utilizarea unei buclă în PHP sau JavaScript pentru a adăuga codul HTML la o variabilă. Handlebars nu este intruziv, și acest lucru face ca Handlebars atât de accesibile. De asemenea, ați putea observa că folosim numele atributului, acest, pentru a prelua elementul curent al matricei în fiecare buclă.

Acest exemplu este bun pentru o serie de valori simple, dar cum vă ocupați de date mai complexe? În mod esențial, faceți același lucru. De exemplu, vom scrie un șablon pentru următoarele date:

Nume: "Band", Data: "Aug 14th, 2012", Albume: Nume: "Nume generic", Nume: "Ceva altceva!" ], Nume: "Alți băieți", Data: "Aug 22nd, 2012" Albume: [Nume: "Albumul 1"]]]

Putem afișa cu ușurință aceste informații utilizând următorul șablon:

 #în fiecare bandă  /fiecare 
Numele benzii Data Numele albumului
Nume Data Albums.0.Name

Puteți să stocați șablonul într-un

Pentru confort, puteți să păstrați șablonul într-un

Dacă datele site-ului dvs. se modifică în mod regulat, atunci vă recomandăm să aruncați o privire la Handlebars.

Acesta este codul complet pentru compilarea și generarea codului HTML dintr-un șablon. Puteți trece din punct de vedere tehnic datele JSON de la API direct în Handlebars, dar întâmpinați probleme de origine încrucișată. În loc să efectueze un fel de hack sau folosind PHP pentru a "echo" datele într-o variabilă JavaScript, am decis să puneți toate acestea într-un fișier separat: Recipe.php. Deci, înainte de a începe construirea șablonului, să mergem să aruncăm o privire la acel fișier PHP.

Obținerea datelor

API-ul Yummly este destul de simplu. Nu există un sistem de autentificare elaborat; trebuie doar să vă înscrieți, să obțineți niște acreditări și să le inserați în URL. Puteți să faceți ecou direct datele, dacă doriți, dar vreau informații detaliate despre fiecare rețetă. Prin urmare, voi procesa datele de la primul apel API și voi face oa doua cerere pentru fiecare rețetă. Aici este scriptul PHP complet:

chibrituri; // Ciclul prin rețete și obțineți rețeta completă pentru fiecare președinte ($ Rețete ca $ Rețetă) $ ID = $ Rețetă-> id; $ R = json_decode (file_get_contents ("http://api.yummly.com/v1/api/recipe/". $ ID. "? _App_id =". $ UserID. "& _App_key =". $ UserKey ". „)); // Aceasta este data pe care o vom transmite catre Template-ul nostru array_push ($ Json, array (Nume => $ R-> nume, Ingredients => $ R-> ingredientLines, Image => $ R-> -> hostedLargeUrl, Randament => $ R-> randament, Flavors => $ R-> arome, Source => array (Name => $ R-> sursa-> sourceDisplayName, Url => $ R-> source-> sourceRecipeUrl )));  // Imprimați ultimul obiect JSON echo json_encode ($ Json); ?>

Prin construirea site-ului dvs. cu un șablon Handlebars, puteți produce un cod complet al site-ului în doar câteva rânduri. Iată întregul șablon:

Să trecem prin acest cod. Primele șapte linii sunt doar sigla din partea de sus a paginii. Apoi, pentru fiecare rețetă, creăm o "carte" de rețetă cu o imagine, nume și ingrediente.

API-ul Yummly returnează o listă de date despre aromă (adică cât de dulce, acru, picant, etc ...) pentru fiecare element. Am scris o funcție de ajutor, numită getFlavor care ia această informație și returnează cea mai dominantă aromă în vas. Pentru ca acest șablon să funcționeze, trebuie să încărcați în getFlavor helper în Handlebars înainte de parsarea șablonului. Deci, la începutul celei de-a doua secțiuni de script, adăugați următorul cod înainte de codul Ajax:

Handlebars.registerHelper ("getFlavor", funcția (FlavorsArr) var H = 0; var Nume = "; pentru (var F în FlavorsArr) if FlavorsArr [F] F; întoarceți "Această mâncare are o aromă" + Nume + ";);

Acum, ori de câte ori vede Handlebars getFlavor, el apelează funcția asociată și preia informațiile de aromă.

În acest moment, aveți libertatea de a juca și de a crea șabloanele pe care le doriți, dar cel mai probabil veți vedea că acest proces este lent. Acest lucru se datorează în principal celor trei apeluri API înainte ca Handlebars să încarce pagina. Evident, acest lucru nu este ideal, dar precompilarea șablonului vă poate ajuta.


precompilării

Aveți două opțiuni diferite atunci când vine vorba de Handlebars. Primul este de a precompila doar șablonul real. Acest lucru reduce timpul de încărcare și nu va trebui să includeți compilatorul Handlebars cu pagina dvs..

De asemenea, aceasta are ca rezultat o dimensiune a fișierului mai mică, dar acest lucru nu ne ajută cu adevărat în scenariul nostru.

Problema noastră este comunicarea dintre browser și API. Dacă doriți să vă precompilați șablonul, puteți descărca pachetul Node.js prin NPM cu următoarea comandă:

npm instalați ghidon -g

Este posibil să aveți nevoie să faceți acest lucru ca root (adică adăugați "sudo" înaintea comenzii). Odată instalat, puteți crea un fișier pentru șablonul dvs. și îl puteți compila așa:

ghidonuri demo.handlebars -f demo.js

Ar trebui să dați fișierul șablonului a .ghidonul extensie. Acest lucru nu este obligatoriu, dar dacă îl numiți ceva asemănător demo.html, numele șablonului va fi "demo.html" așa cum este folosit doar pentru "demo". După ce ați numit șablonul, includeți pur și simplu fișierul de ieșire împreună cu versiunea de run-time a Handlebars (puteți utiliza versiunea obișnuită, dar este mai mare) și tastați următoarele:

var template = Handlebars.templates ['demo']; var html = șablon (Json Data aici);

dacă nu declarația este ... în esență inversată dacă afirmație.

Dar, așa cum am menționat mai devreme, acest lucru nu ne ajută cu adevărat în acest scenariu. Ce putem face atunci? Putem precompila și afișa întregul fișier. Acest lucru face ca putem rula șablonul cu date și salvați ieșirea HTML finală - cache, cu alte cuvinte. Acest lucru accelerează drastic timpul de încărcare al aplicației. Din păcate, JavaScript de pe partea clientului nu are capabilități de IO pentru fișiere. Deci, cel mai simplu mod de a realiza acest lucru este de a exporta HTML-ul într-o casetă de text și ao salva manual. Fiți conștienți de orientările API privind cache-ul. Cele mai multe API-uri au un timp maxim pe care datele pot fi stocate în memoria cache; asigurați-vă că găsiți aceste informații înainte de a salva pagini statice.


Concluzie

Aceasta a fost o introducere rapidă la Handlebars. Mergând înainte, puteți privi în "Paralele" - șabloane mici care pot fi folosite ca și funcții. Ca întotdeauna, nu ezitați să lăsați un comentariu sau o întrebare în secțiunea de comentarii de mai jos.

Cod