2017-02-08 4 views
3

После борьбы с шаблоном вар именем {{engine.x.y}}, который был «молча», показывая ничего, пока я не изменил его на что-то другое, например, как {{_engine.x.y}}, я увидел, что other words such as {{action}} seemed to be "reserved", with no "escaping" possibility ...Есть ли официальный список зарезервированных слов Handlebars?

Есть ли список таких «зарезервированные слова» чтобы уменьшить «фактор неожиданности»? Я не мог найти.

EDIT

  • еще более странно, когда я использую {{engine}} непосредственно (не engine.x.y) всегда заменяется строкой ".hbs"

  • однако в моем контексте (Node v4.6 + электронная почта-шаблоны + руля) {{action}} работает правильно (linked problem above выглядит конкретно для Ember.js)

+3

Я просто искал исходный код [handlebars.js] (https://github.com/wycats/handlebars.js/search?utf8=%E2%9C%93&q=engine)/[исходный код mustache.js] (https://github.com/janl/mustache.js/search?utf8=%E2%9C%93&q=engine), и странно, что я даже не мог найти ни одного экземпляра слова «двигатель», что странно. Я также искал любые экземпляры зарезервированных слов, и есть результаты в исходном коде handlebars.js, но похоже, что он ссылается на [глобально зарезервированные переменные в JS] (https://github.com/wycats/handlebars .js/поиск? utf8 =% E2% 9C% 93 & д = зарезервирован). –

+0

Вы используете Ember? Я бы рискнул предположить, что «зарезервированные» значения исходят из того, что задает область Handlebars, а не самих Handlebars. –

+0

@JoeClay, вы правы, я не использую ember и использую '{{action}}' в моем случае (Node.js v4.6) отлично работает. Интересно ... –

ответ

2

Найденный - проблема не в Handlebars (что Джош Крозье не оставлял никаких комментариев в комментариях выше), это с помощью библиотеки email-templates, которую вы используете. Функция render использует множество свойств объекта, который передается в качестве контекста шаблона, а это означает, что если ваш объект содержит свойства с тем же именем, они становятся сбитыми.

Соответствующая строка кода в email-templates источнике можно найти here, но для полноты картины, свойства которых переписываются являются:

  • filename (набор с названием файла шаблона)
  • engine (устанавливается на расширение файла используемого шаблонного модуля)
  • templatePath (указан в каталоге, который содержит ваш шаблон)

Наиболее очевидным решением было бы просто изменить имя, но если это не вариант, вам может понадобиться file an issue on their repo.

+1

Только 3" особых случая ", тогда ... Мне там не повезло ... ^^ В любом случае спасибо! Впечатлен вашей быстротой и подробные объяснения. –

+0

@FrostyZ: Нет проблем!Рад, что смог помочь :) –