Às vezes é útil ter variáveis globais para templates.
Alguns exemplos podem incluir coisas como:
Eu estava pensando que seria legal adicionar algo como:
var hbs = require("handlebars");
hbs.registerGlobal({
title: "myapp"
});
Que pode ser referenciado em qualquer modelo, talvez via @global.title
, @title
ou apenas title
.
Pensamentos?
Eu estava pensando mais sobre isso e acho que criar um ajudante em linha poderia fazer o que você deseja.
var hbs = require("handlebars");
var myGlobal = {
title: "myapp"
};
hbs.registerHelper('global', function(key){
return myGlobal[key];
});
{{! in your template }}
<div>{{global "title"}}</div>
E você pode fazer o que quiser com myGlobal
Você pode
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, há uma desvantagem, como as teclas sendo substituídas, mas isso é tudo.
Apoiar isso no próprio Handlebars exigirá muita sobrecarga para pouco ganho, IMO.
Existem várias opções como a sugestão de ajuda do @rafde ou passando o global no campo de dados, que deve realmente funcionar com a sintaxe proposta acima:
template(context, {data: {global: global}})
Deve expor tudo na janela em {{@global.foo}}
, mas eu não testei isso e você precisará validar se isso de fato funciona.
@kpdecker template(context, {data: {global: global}})
não está explicitamente documentado.
O mais próximo que eu vi é template({}, {data: {level: Handlebars.logger.WARN}})
Mas a documentação não menciona que um segundo parâmetro pode ser passado.
Nossa documentação geralmente está faltando, mas se você quiser ajudar a melhorar, isso seria incrível.
Isso é amplamente testado: https://github.com/wycats/handlebars.js/blob/master/spec/data.js#L1
Por que você não poderia fazer isso simplesmente definindo o par chave/valor em um objeto não variável?
glabalPair = {title: "Title"};
https://github.com/wycats/handlebars.js/blob/master/spec/data.js#L1 foi a resposta. Fechando isso, mas a documentação ainda deve ser adicionada.
Ainda não documentado?
Comentários muito úteis
@kpdecker
template(context, {data: {global: global}})
não está explicitamente documentado.O mais próximo que eu vi é
template({}, {data: {level: Handlebars.logger.WARN}})
Mas a documentação não menciona que um segundo parâmetro pode ser passado.