我正在尝试将Handlebars部分注册,以便它可以包含在另一个视图中。我正在使用Handlebars 2.0.0。
这是模板:
{{> subNav}}
<h1>Issue name: {{ name }}</h1>
<h2>Issue id: {{ id }}</h2>
<section id="issue-sections">
{{#each sections}}
<li>
{{> sectionsListItem}}
</li>
{{/each}}
</section>
这是部分:
<p>This is a sub navigation.</p>
我正在使用Handlebars预编译器编译所有模板,如下所示:
handlebars views/partials/*.handlebars views/partials/**/*.handlebars -f .tmp/public/js/templates.js
在我的申请中:
Handlebars.partials = Handlebars.templates;
当我在控制台中运行以下命令时:
Handlebars.templates.issuesShow({'a':'b'});
结果如下:
"[object Object]<p>This is a sub navigation.</p>
<h1>Issue name: </h1>
<h2>Issue id: </h2>
<section id="issue-sections">
</section>"
我不确定为什么打印出[Object object] ....有什么想法吗?
答案 0 :(得分:2)
我今天遇到了同样的问题。我相信这是因为我在本地安装的把手版本(把手3.0)我用来预编译我的模板和我在浏览器中使用的npm(把手2.0)安装的版本之间的不匹配造成的。我将项目的把手npm包升级到3.0,一切都在游泳。
答案 1 :(得分:0)
我不确定为什么会这样。但是,我认为问题在于模板是使用手柄预编译器预编译的,然后在将它们分配给Handlebars.partials时再次编译。
对此有一个更优雅的解决方案,但我现在让它使用以下与grunt-exec一起运行的命令。
handlebars views/partials/**/*.handlebars > .tmp/public/js/templates.js
这会预编译模板,它们将在Handlebars.templates
然后我也跑了。
handlebars -p views/partials/**/*.handlebars >> .tmp/public/js/templates.js
。
使用partials标志再次预编译相同的模板,并将输出附加到相同的模板文件。
然后可以从Handlebars.partials
获取这些内容,也可以使用Handlebars在其他模板中使用,包括部分语法:{{> partialName }}
。