Handlebars.js: Enregistrez les variables globales.

Créé le 22 févr. 2016  ·  7Commentaires  ·  Source: handlebars-lang/handlebars.js

Parfois, il est utile d'avoir des variables globales pour les modèles.
Certains exemples pourraient inclure des éléments tels que :

  • L'objet utilisateur actif.
  • Configuration de l'application (titre, description, méta)
  • Informations sur l'itinéraire (chemin, hachage, etc.).

Je pensais que ce serait cool d'ajouter quelque chose comme:

var hbs = require("handlebars");

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

Qui pourrait être référencé dans n'importe quel modèle, peut-être via @global.title , @title ou simplement title .

Les pensées?

docs-needed

Commentaire le plus utile

@kpdecker template(context, {data: {global: global}}) n'est pas explicitement documenté.
Le plus proche que j'ai vu est template({}, {data: {level: Handlebars.logger.WARN}})

Mais la documentation ne mentionne pas qu'un 2ème paramètre peut être passé.

Tous les 7 commentaires

Je réfléchissais davantage à cela et je pense que la création d'un assistant en ligne pourrait faire ce que vous voulez.

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

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

Et vous pouvez faire n'importe quoi avec myGlobal
Tu peux

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];
});

Naturellement, il y a un inconvénient, comme si vos clés étaient écrasées, mais c'est tout pour vous.

Soutenir cela dans le guidon lui-même nécessitera beaucoup de frais généraux pour peu de gain, IMO.

Il existe un certain nombre d'options telles que la suggestion d'assistance de @rafde ou la transmission d'un global dans le champ de données, qui devrait en fait fonctionner avec la syntaxe proposée ci-dessus :

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

Devrait tout exposer sur la fenêtre dans {{@global.foo}} , mais je n'ai pas testé cela et vous devrez valider que cela fonctionne en fait.

@kpdecker template(context, {data: {global: global}}) n'est pas explicitement documenté.
Le plus proche que j'ai vu est template({}, {data: {level: Handlebars.logger.WARN}})

Mais la documentation ne mentionne pas qu'un 2ème paramètre peut être passé.

Notre documentation fait souvent défaut, mais si vous voulez nous aider à nous améliorer, ce serait génial.

Ceci est largement testé : https://github.com/wycats/handlebars.js/blob/master/spec/data.js#L1

Pourquoi ne pourriez-vous pas le faire en définissant simplement la paire clé/valeur dans un objet non variable ?

glabalPair = {title: "Title"};

https://github.com/wycats/handlebars.js/blob/master/spec/data.js#L1 était la réponse. Fermeture de ceci mais la documentation doit encore être ajoutée.

Pas encore documenté ?

Cette page vous a été utile?
0 / 5 - 0 notes