Иногда полезно иметь глобальные переменные для шаблонов.
Некоторые примеры могут включать такие вещи, как:
Я подумал, что было бы здорово добавить что-то вроде:
var hbs = require("handlebars");
hbs.registerGlobal({
title: "myapp"
});
На который можно ссылаться в любом шаблоне, возможно, через @global.title
, @title
или просто title
.
Мысли?
Я думал об этом больше, и я думаю, что создание встроенного помощника может сделать то, что вы хотите.
var hbs = require("handlebars");
var myGlobal = {
title: "myapp"
};
hbs.registerHelper('global', function(key){
return myGlobal[key];
});
{{! in your template }}
<div>{{global "title"}}</div>
И вы можете делать что угодно с myGlobal
Ты сможешь
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];
});
Естественно, есть недостаток, например, перезапись ключей, но это все, что вам нужно.
Поддержка этого в самом Handlebars потребует много накладных расходов для небольшого выигрыша, IMO.
Существует ряд вариантов, таких как предложение помощника @rafde или передача глобального значения в поле данных, которые должны фактически работать с предложенным выше синтаксисом:
template(context, {data: {global: global}})
Должен выставлять все в окне в {{@global.foo}}
, но я не проверял это, и вам нужно будет убедиться, что это действительно работает.
@kpdecker template(context, {data: {global: global}})
явно не задокументирован.
Самое близкое, что я видел, это template({}, {data: {level: Handlebars.logger.WARN}})
Но в документации не упоминается, что можно передать второй параметр .
Нашей документации часто не хватает, но если вы хотите помочь улучшить, это было бы здорово.
Это тщательно протестировано: https://github.com/wycats/handlebars.js/blob/master/spec/data.js#L1 .
Почему бы вам не сделать это, просто определив пару ключ/значение в непеременном объекте?
glabalPair = {title: "Title"};
https://github.com/wycats/handlebars.js/blob/master/spec/data.js#L1 был ответом. Закрытие этого, но документация все еще должна быть добавлена.
Еще не задокументировано?
Самый полезный комментарий
@kpdecker
template(context, {data: {global: global}})
явно не задокументирован.Самое близкое, что я видел, это
template({}, {data: {level: Handlebars.logger.WARN}})
Но в документации не упоминается, что можно передать второй параметр .