Handlebars.js: Зарегистрируйте глобальные переменные.

Созданный на 22 февр. 2016  ·  7Комментарии  ·  Источник: handlebars-lang/handlebars.js

Иногда полезно иметь глобальные переменные для шаблонов.
Некоторые примеры могут включать такие вещи, как:

  • Активный пользовательский объект.
  • Конфигурация приложения (название, описание, мета)
  • Информация о маршруте (путь, хэш и т. д.).

Я подумал, что было бы здорово добавить что-то вроде:

var hbs = require("handlebars");

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

На который можно ссылаться в любом шаблоне, возможно, через @global.title , @title или просто title .

Мысли?

docs-needed

Самый полезный комментарий

@kpdecker template(context, {data: {global: global}}) явно не задокументирован.
Самое близкое, что я видел, это template({}, {data: {level: Handlebars.logger.WARN}})

Но в документации не упоминается, что можно передать второй параметр .

Все 7 Комментарий

Я думал об этом больше, и я думаю, что создание встроенного помощника может сделать то, что вы хотите.

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 был ответом. Закрытие этого, но документация все еще должна быть добавлена.

Еще не задокументировано?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги