Eine Einführung in die Lenker

Wenn sich die Daten Ihrer Site regelmäßig ändern, möchten Sie vielleicht einen Blick auf Handlebars werfen. Handlebars ist ein Vorlagenprozessor, der Ihre HTML-Seite dynamisch generiert und so Zeit für manuelle Updates einspart. In diesem Lernprogramm werde ich Ihnen die Handlebars vorstellen und Sie lernen, wie Sie eine grundlegende Vorlage für Ihre Site erstellen.


Site-Vorlage

Es gibt zwei Hauptgründe, warum Sie eine Vorlage für Ihre Site erstellen möchten. Wenn Sie eine Vorlage erstellen, müssen Sie zunächst den logikbasierten Code von der tatsächlichen Ansicht trennen, sodass Sie ein View / Controller-Muster einhalten können. Zweitens halten Vorlagen Ihren Code sauber und pflegbar, was die Aktualisierung Ihrer Website zu einem Kinderspiel macht. Sie erstellen keine Site mit Handlebars. Stattdessen erstellen Sie Richtlinien und Strukturen, die bestimmen, wie die Site aussehen soll, ohne sich auf die Daten einer Seite zu konzentrieren. Lassen Sie uns einige der Grundlagen besprechen.


Die Grundlagen

Handlebars generiert Ihren HTML-Code, indem Sie eine JSON-Struktur verwenden und durch eine Vorlage ausführen. Diese Vorlagen sind zumeist in normalem HTML geschrieben und mit Platzhaltern gespickt, mit denen Sie bei Bedarf Daten einfügen können. Beispielsweise begrüßt die folgende Vorlage den Benutzer, wenn er sich anmeldet:

Willkommen zurück, name

Das Name Attribut ist, wo der Name des Benutzers in die Seite eingefügt wird. Dieser Platzhalter entspricht einer Eigenschaft in der JSON-Struktur der Daten. Dies ist das einfachste Beispiel, aber Sie werden bald feststellen, dass alles andere auf dieses einfache Konzept hinausläuft. Fahren wir mit dem Umgang mit Arrays fort.

Arrays

Im Lieferumfang der Lenkstange sind einige integrierte Helfer enthalten, die Sie bei der Arbeit mit komplexeren Daten unterstützen. Einer dieser Helfer ist der jeder Helfer. Dieser Helfer durchläuft ein Array und ermöglicht es Ihnen, dynamisches HTML pro Array-Element zu erstellen. Die folgende Vorlage zeigt beispielsweise die Daten eines Arrays an, die eine Liste der lokalen Konzerte enthalten, die in meinem Bereich gespielt werden:

 #each Concerts  /jeder 
Lokale Konzerte
diese

Wie Sie sehen, ist dieser Code viel sauberer als herkömmlicher Code, z. B. die Verwendung einer Schleife in PHP oder JavaScript, um HTML an eine Variable anzuhängen. Lenker ist nicht aufdringlich, und das macht Lenker so zugänglich. Möglicherweise stellen Sie auch fest, dass wir den Attributnamen verwenden, diese, das aktuelle Array-Element in der jeder Schleife.

Dieses Beispiel eignet sich für ein Array einfacher Werte, aber wie gehen Sie mit komplexeren Daten um? Nun, Sie machen im Wesentlichen dasselbe. Zum Beispiel schreiben wir eine Vorlage für die folgenden Daten:

[Name: "Band", Datum: "14. August 2012", Alben: [Name: "Generic Name", Name: "Etwas anderes !!" ], Name: "Other Guys", Datum: "22. August 2012" Alben: [Name: "Album One"]]

Wir können diese Informationen einfach mit der folgenden Vorlage anzeigen:

 #each Bands  /jeder 
Band-Name Datum Name des Albums
Name Datum Albums.0.Name

Sie können Ihre Vorlage in einem Ordner speichern

Sie können Ihre Vorlage in einem Ordner speichern

Wenn sich die Daten Ihrer Site regelmäßig ändern, möchten Sie vielleicht einen Blick auf Handlebars werfen.

Dies ist der vollständige Code zum Kompilieren und Generieren von HTML-Code aus einer Vorlage. Sie können die JSON-Daten von der API aus technisch direkt an Handlebars übergeben, aber Sie haben Probleme mit dem Ursprungspunkt. Anstatt irgendeine Art von Hack auszuführen oder PHP zu verwenden, um die Daten in einer JavaScript-Variablen zu "echo", entschied ich mich, das alles in einer separaten Datei zu speichern: Rezept.php. Bevor wir mit dem Erstellen der Vorlage beginnen, sehen wir uns diese PHP-Datei an.

Die Daten abrufen

Die Yummly-API ist ziemlich einfach. Es gibt kein ausgefeiltes Authentifizierungssystem. Sie müssen sich nur anmelden, einige Anmeldeinformationen abrufen und diese in die URL einfügen. Sie können die Daten auch direkt wiedergeben, wenn Sie möchten, aber ich möchte ein wenig detailliertere Informationen zu jedem Rezept. Daher werde ich die Daten des ersten API-Aufrufs verarbeiten und für jedes Rezept eine zweite Anforderung stellen. Hier ist das komplette PHP-Skript:

Streichhölzer; // Durchlaufen Sie die Rezepte und erhalten Sie ein vollständiges Rezept für jeden Foreach ($ Recipes as $ Recipe) $ ID = $ Recipe-> ID; $ R = json_decode (file_get_contents ("http://api.yummly.com/v1/api/recipe/". $ ID. "? _App_id =". $ UserID. "& _App_key =". $ UserKey. "& Images = large ")); // Dies sind die Daten, die wir an unser Template array_push übergeben werden ($ Json, array (Name => $ R-> name, Ingredients => $ R-> zutatenLines, Image => $ R-> images [0] -> hostedLargeUrl, Yield => $ R-> Ertrag, Flavors => $ R-> Flavours, Source => Array (Name => $ R-> source-> sourceDisplayName, Url => $ R-> source-> sourceRecipeUrl )));  // Das letzte JSON-Objekt ausdrucken echo json_encode ($ Json); ?>

Wenn Sie Ihre Site mit einer Handlebars-Vorlage erstellen, können Sie den Code einer ganzen Site in nur wenigen Zeilen erstellen. Hier ist die gesamte Vorlage:

Lassen Sie uns diesen Code durchgehen. Die ersten sieben Zeilen sind nur das Logo oben auf der Seite. Für jedes Rezept erstellen wir dann eine Rezeptkarte mit Bild, Name und Zutaten.

Die Yummly-API gibt eine Liste von Flavour-Daten (d. H. Wie süß, sauer, würzig usw.) für jeden Artikel zurück. Ich habe einen Funktionshelfer geschrieben, angerufen getFlavor das nimmt diese Informationen und gibt den dominantesten Geschmack in der Schale zurück. Damit diese Vorlage funktioniert, müssen wir in die getFlavor Helfer in den Lenker, bevor Sie die Vorlage analysieren. Fügen Sie am Anfang des zweiten Skriptabschnitts den folgenden Code vor dem Ajax-Code hinzu:

Handlebars.registerHelper ("getFlavor", Funktion (FlavorsArr) var H = 0; var Name = "; für (var F in FlavorsArr) if (FlavoursArr [F]> H) H = FlavoursArr [F]; Name = F; return "Dieses Gericht hat einen" + Namen + "Geschmack";);

Nun, wann immer die Lenkstange sieht getFlavor, Es ruft die zugehörige Funktion auf und ruft die Flavour-Informationen ab.

An dieser Stelle können Sie die Vorlage beliebig herumspielen und entwerfen, aber Sie werden höchstwahrscheinlich feststellen, dass dieser Prozess langsam ist. Dies ist hauptsächlich auf die drei API-Aufrufe zurückzuführen, bevor Handlebars die Seite lädt. Offensichtlich ist dies nicht ideal, aber das Vorkompilieren Ihrer Vorlage kann hilfreich sein.


Vorkompilierung

Sie haben zwei verschiedene Optionen, wenn es um Lenker geht. Die erste besteht darin, die eigentliche Vorlage nur vorab zu kompilieren. Dadurch wird die Ladezeit verkürzt, und Sie müssen den Handlebars-Compiler nicht in Ihre Seite aufnehmen.

Dies führt auch zu einer geringeren Dateigröße, was in unserem Szenario jedoch nicht wirklich hilfreich ist.

Unser Problem ist die Kommunikation zwischen dem Browser und der API. Wenn Sie Ihre Vorlage vorkompilieren möchten, können Sie das Paket Node.js über herunterladen npm mit dem folgenden Befehl:

npm install-Lenker -g

Möglicherweise müssen Sie dies als root tun (d. H. Vor dem Befehl "sudo" hinzufügen). Nach der Installation können Sie eine Datei für Ihre Vorlage erstellen und wie folgt kompilieren:

Lenker demo.handlebars -f demo.js

Sie sollten Ihrer Vorlagendatei eine geben .Lenker Erweiterung. Dies ist nicht obligatorisch, aber wenn Sie es so nennen demo.html, Dann wird der Name der Vorlage "demo.html" lauten und nur "demo" entsprechen. Fügen Sie nach der Benennung Ihrer Vorlage einfach die Ausgabedatei zusammen mit der Laufzeitversion von Handlebars ein (Sie können die reguläre Version verwenden, die aber größer ist), und geben Sie Folgendes ein:

var template = Handlebars.templates ['Demo']; var html = template (Ihre Json-Daten hier);

Das es sei denn Aussage ist… im Wesentlichen ein umgekehrtes ob Aussage.

Aber wie gesagt, das hilft uns in diesem Szenario nicht wirklich. Was können wir dann tun? Nun, wir können die gesamte Datei vorkompilieren und ausgeben. Dies macht es so, dass wir die Vorlage mit Daten ausführen und die endgültige HTML-Ausgabe speichern können - mit anderen Worten: Caching. Dies beschleunigt die Ladezeit Ihrer Anwendung drastisch. Leider hat clientseitiges JavaScript keine E / A-Funktionen. Am einfachsten ist dies, wenn Sie den HTML-Code einfach in ein Textfeld ausgeben und manuell speichern. Beachten Sie die Richtlinien einer API zum Caching. Die meisten APIs haben eine maximale Zeit, für die Daten zwischengespeichert werden können. Stellen Sie sicher, dass Sie diese Informationen finden, bevor Sie statische Seiten speichern.


Fazit

Dies war eine kurze Einführung in die Lenkstange. Im weiteren Verlauf können Sie unter "Partials" nachschauen, kleine Vorlagen, die wie Funktionen verwendet werden können. Wie immer können Sie gerne einen Kommentar oder eine Frage im Kommentarabschnitt hinterlassen.