TypeError, применяющий предварительно скомпилированные шаблоны Handlebars с контекстом
Извините за вопрос noob, но я просто не могу получить предварительно скомпилированные шаблоны Handlebars, чтобы сделать что-либо, кроме barf out
TypeError: 'undefined' не является функцией (оценивая "templateSpec.call(контейнер, Handlebars, context, options.helpers, options.partials, options.data)" )
каждый раз, когда я применяю контекст к (предварительно скомпилированному) шаблону.
Учитывая следующие файлы и содержимое:
- hello.handlebars:
<p>Hello, {{name}}</p>
- templates.js: результат компиляции hello.handlebars через
handlebars hello.handlebars -f templates.js
-
index.html: включает Runlebars RC1 runtime в head
и это для тела:
<body id="body">
<script src="templates.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" charset="utf-8">
var compiledTemplate = Handlebars.templates['hello'];
var html = compiledTemplate({ name: 'World' });
document.getElementById('body').innerHTML = html;
</script>
</body>
Вызов compiledTemplate()
выдает эту ошибку выше, чем бы я ни занимался, но я могу получить шаблоны на стороне клиента для компиляции и отображения. Все пошаговые руководства и учебные пособия, которые я видел, пропускают это, как это очевидно, поэтому мне, должно быть, не хватает чего-то глупого. Любые идеи?
Ответы
Ответ 1
Обязательно сопоставьте версии серверов и клиентских пакетов Handlebars. Способ проверки версии скомпилированного шаблона выглядит следующим образом:
handlebars a_template_of_yours.handlebars | grep "compilerInfo"
Он должен выводить что-то вроде этого:
this.compilerInfo = [4, ' >= 1.0.0'];
Первое значение - это Редактор компилятора, который должен соответствовать выходу следующего кода в вашем браузере:
Handlebars.COMPILER_REVISION
Если вы использовали npm для загрузки своего компилятора Handlebars, укажите нужную вам версию. Ниже приведен пример для handlebars.runtime-v1.3.0.js:
npm install [email protected] -g
Ответ 2
Проблема для меня в том, что в настоящее время (июнь 2014 года) релиз 2.0 на GitHub отмечен альфа https://github.com/wycats/handlebars.js/releases.
Если я устанавливаю рули через bower
, он выбирает последнюю стабильную версию. v1.3.0
.
npm install handlebars
, однако, устанавливает версию ~2.0.0-alpha.4
.
Решение: обновите версию в bower.json
до ~2.0.*
и запустите bower update
.