题 如何为handlebars.js预编译部分?


我正在使用handlebars.js,我想开始预编译所有内容,但我似乎无法找到预编译部分的方法。我的大部分模板实际上都是偏见的。我试着像对待常规模板那样对待我们,但是然后将它们称为部分模板不起作用。

有没有办法预编译部分,或者,从另一个模板中调用一个模板?


29
2017-08-17 23:53


起源




答案:


我发现了一个更好的方法:将所有部分预编译为模板,然后在代码中使用它们之前,添加以下行:

Handlebars.partials = Handlebars.templates;

改进是1)它更短,2)它不会丢失任何调用父模板时可能传递的自定义助手。


47
2017-08-27 19:48



这太棒了!它背后的秘密是什么?为什么这不是内置于车把?不管怎么说,还是要谢谢你 :))))) - 尤川豪
秘诀是部分和模板之间没有任何区别;) - Nathan Friedly
您是否仍然使用此方法使用正常的部分语法调用模板中的部分? - am80l
是的,标准语法: {{> partialName}},或者至少那是我们当时所做的。 (我不再在我实施此项目的公司工作,最近我没有使用过把手模板。但这个答案可能仍然是正确的。) - Nathan Friedly
神奇的是,用于单元测试的预编译把手模板的解决方法将从中链接 github.com/hanachin/karma-handlebars-preprocessor/issues/2 - monkeyboy


如上所述 这里是GitHub,有一个 -p flag添加到Handlebars CLI。

所以你可以使用 handlebars my_partial.handlebars -p -f output.js


6
2018-03-23 16:55





我正在使用HandleBars v3.0.3,并且我在一个文件中预编译了部分和非部分模板。

这个线程有点令人困惑,所以我总结了工作解决方案。

  • 预编译时不要使用-p运算符。
  • 不要通过Handlebars.registerPartial('myPartial','{{name}}')注册部分模板;
  • 使用Nathan建议将部分对象映射到模板对象 Handlebars.partials = Handlebars.templates;
  • 按名称{{> name}}引用部分模板

4
2018-06-02 07:24





仍然不确定预编译部分,但这是如何在这个问题的帮助下从另一个模板中调用一个模板: 把手帮手模板组成

// instead of {{> partialName}} use {{partial "templateName"}}
Handlebars.registerHelper('partial', function(templateName,context){
    return new Handlebars.SafeString(Handlebars.templates[templateName](this));
});

http://jsfiddle.net/EBt8R/


3
2017-08-18 01:06





我设法通过预先编译我的所有部分作为模板然后调整Nathans解决方案来使其工作

// instead of {{> partialName}} use {{partial "templateName"}}
Handlebars.registerHelper('partial', function (templateName) {
    return new Handlebars.SafeString(JST[templateName](this));
});

所以对我来说 Handlebars.templates 成为 JST 当我编译的东西,我在我编译的模板文件中注意到它。


0
2018-02-11 23:31