Handlebars.js: Registrar variables globales.

Creado en 22 feb. 2016  ·  7Comentarios  ·  Fuente: handlebars-lang/handlebars.js

A veces es útil tener variables globales para las plantillas.
Algunos ejemplos podrían incluir cosas como:

  • El objeto de usuario activo.
  • Configuración de la aplicación (título, descripción, meta)
  • Información de la ruta (ruta, hash, etc).

Estaba pensando que sería genial agregar algo como:

var hbs = require("handlebars");

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

A la que se podría hacer referencia en cualquier plantilla, quizás a través @global.title , @title o simplemente title .

¿Pensamientos?

docs-needed

Comentario más útil

@kpdecker template(context, {data: {global: global}}) no está documentado explícitamente.
Lo más cercano que he visto es template({}, {data: {level: Handlebars.logger.WARN}})

Pero la documentación no menciona que se puede pasar un segundo parámetro .

Todos 7 comentarios

Estaba pensando más en esto y creo que crear un asistente en línea podría hacer lo que quieras.

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

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

Y puedes hacer lo que sea con myGlobal
Puede

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

Naturalmente, hay un inconveniente como que las teclas se sobrescriben, pero eso es todo.

Apoyar esto dentro de Handlebars requerirá una gran cantidad de gastos generales para obtener pocas ganancias, en mi opinión.

Hay una serie de opciones como la sugerencia de ayuda de @rafde o pasar el global en el campo de datos, que en realidad debería funcionar con la sintaxis propuesta anteriormente:

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

Debería exponer todo en la ventana en {{@global.foo}} , pero no lo he probado y deberá validar que esto funcione de hecho.

@kpdecker template(context, {data: {global: global}}) no está documentado explícitamente.
Lo más cercano que he visto es template({}, {data: {level: Handlebars.logger.WARN}})

Pero la documentación no menciona que se puede pasar un segundo parámetro .

A menudo falta nuestra documentación, pero si desea ayudar a mejorar, sería fantástico.

Esto se ha probado exhaustivamente: https://github.com/wycats/handlebars.js/blob/master/spec/data.js#L1

¿Por qué no podría hacer esto simplemente definiendo el par clave/valor en un objeto no variable?

glabalPair = {title: "Title"};

https://github.com/wycats/handlebars.js/blob/master/spec/data.js#L1 fue la respuesta. Cerrando esto, pero aún se debe agregar documentación.

¿Aún no está documentado?

¿Fue útil esta página
0 / 5 - 0 calificaciones