使用组合混合动态/预编译车把模板

时间:2013-11-21 19:14:10

标签: handlebars.js assemble grunt-assemble

我正在使用Grunt和Assemble在我的网站上创建预编译模板,但我需要根据存储在客户端存储中的信息动态创建一些部分。有没有办法从预编译中免除模板的各个部分?

1 个答案:

答案 0 :(得分:9)

我们不能做自定义分隔符(Handlebars的缺点),但有一些解决方案可能适合您。这两者都不一定是惯用的,所以你可以判断这些对你正在进行的项目的适用程度。

字符串替换

你可以为不应该编译的内容中的模板使用一些自定义(临时)分隔符,然后创建一个块助手,在编译期间将这些分隔符转换回有效的把手表达式(我为此答案测试了这个)它有效):

例如:

Handlebars.registerHelper("raw", function(options) {
  return options.fn(this).replace(/\[\[/g, '{{').replace(/\]\]/g, '}}');
});

然后像这样使用它:

{{#raw}}
  {{> foo }}
{{/raw}}

foo.hbs内,您可能会遇到以下情况:

<title>[[title]]</title>

它将呈现给:

<title>{{title}}</title>

这个解决方案肯定是hacky,如果您在包含的内容中嵌入了任何代码示例,并且其中一个示例恰好具有该语法(例如[0,1,[foo, bar]]

),则可能会遇到问题。

<强>逸出

此解决方案很可能是更好的方法。把手不会评估前面有\的任何模板。所以你可以这样做:

<title>\{{title}}</title>

它将呈现给:

<title>{{title}}</title>

第一个建议可能甚至不值得补充,但嘿,你永远不知道对不对?