Handlebars.js: Registrieren Sie globale Variablen.

Erstellt am 22. Feb. 2016  ·  7Kommentare  ·  Quelle: handlebars-lang/handlebars.js

Manchmal ist es nützlich, globale Variablen für Vorlagen zu haben.
Einige Beispiele könnten Dinge beinhalten wie:

  • Das aktive Benutzerobjekt.
  • App-Konfiguration (Titel, Beschreibung, Meta)
  • Routeninformationen (Pfad, Hash usw.).

Ich dachte, es wäre cool, etwas hinzuzufügen wie:

var hbs = require("handlebars");

hbs.registerGlobal({
   title: "myapp"
});

Auf die in jeder Vorlage verwiesen werden könnte, vielleicht über @global.title , @title oder einfach nur title .

Gedanken?

docs-needed

Hilfreichster Kommentar

@kpdecker template(context, {data: {global: global}}) ist nicht explizit dokumentiert.
Das nächste, was ich gesehen habe, ist template({}, {data: {level: Handlebars.logger.WARN}})

Aber die Dokumentation erwähnt nicht, dass ein 2. Parameter übergeben werden kann.

Alle 7 Kommentare

Ich habe mehr darüber nachgedacht und denke, dass die Erstellung eines Inline-Helfers das tun könnte, was Sie wollen.

var hbs = require("handlebars");
var myGlobal = {
   title: "myapp"
};

hbs.registerHelper('global', function(key){
  return myGlobal[key];
});
{{! in your template }}
<div>{{global "title"}}</div>

Und mit myGlobal kannst du alles machen
Du kannst

define('myGlobal', function(){
  return {
    title: "myapp"
  };
});

...
var myGlobal = require('myGlobal');

myGlobal['newKey'] = 'something';

...

var hbs = require("handlebars");
var myGlobal = require('myGlobal');

hbs.registerHelper('global', function(key){
  return myGlobal[key];
});

Natürlich gibt es einen Nachteil, dass Ihre Schlüssel überschrieben werden, aber das ist alles Sie.

Um dies innerhalb von Handlebars selbst zu unterstützen, ist meiner Meinung nach viel Overhead für wenig Gewinn erforderlich.

Es gibt eine Reihe von Optionen, wie z. B. den Hilfsvorschlag von @rafde oder das Übergeben von global im Datenfeld, was eigentlich mit der oben vorgeschlagenen Syntax funktionieren sollte:

template(context, {data: {global: global}})

Sollte alles im Fenster in {{@global.foo}} anzeigen, aber ich habe dies nicht getestet und Sie müssen überprüfen, ob dies tatsächlich funktioniert.

@kpdecker template(context, {data: {global: global}}) ist nicht explizit dokumentiert.
Das nächste, was ich gesehen habe, ist template({}, {data: {level: Handlebars.logger.WARN}})

Aber die Dokumentation erwähnt nicht, dass ein 2. Parameter übergeben werden kann.

Unsere Dokumentation fehlt oft, aber wenn Sie zur Verbesserung beitragen möchten, wäre das großartig.

Dies ist ausgiebig getestet: https://github.com/wycats/handlebars.js/blob/master/spec/data.js#L1

Warum konnten Sie dies nicht tun, indem Sie einfach das Schlüssel/Wert-Paar in einem nicht variablen Objekt definieren?

glabalPair = {title: "Title"};

https://github.com/wycats/handlebars.js/blob/master/spec/data.js#L1 war die Antwort. Schließen Sie dies, aber die Dokumentation sollte noch hinzugefügt werden.

Noch nicht dokumentiert?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen