我在服务器端节点应用程序中使用Express + Handlebars,我想将客户端模板作为我正在呈现的页面的一部分发送到浏览器。
的index.html
<html>
<head>
<title>{{title}}</title>
</head>
<body>
<div>
{{stuff}}
</div>
<script id="more-template" type="text/x-handlebars-template">
<div>{{more}}</div>
</script>
</body>
不幸的是,把手试图在#more-template脚本块中渲染这些东西。 (这只是删除了{{more}}
,因为它在服务器模板的上下文中是未定义的。
有没有办法可以让它忽略脚本标签内的内容?(这样客户端模板就可以使用它了)
我已经看到了这个问题:Node.js with Handlebars.js on server and client,我宁愿只使用1个模板引擎。
答案 0 :(得分:5)
所以我没有找到轻松忽略客户端模板的方法,但普遍的共识是预编译客户端模板。
npm install handlebars -g
handlebars client-template1.handlebars -f templates.js
<script src="templates.js"></script>
var html = Handlebars.templates["client-template1"](context);
额外信息
Using pre-compiled templates with Handlebars.js (jQuery Mobile environment)
http://handlebarsjs.com/precompilation.html
答案 1 :(得分:5)
一般情况下,当您的模板被编译两次时(例如,当您只是服务器端)并且您想要在第一次运行时忽略模板标签时,您可以通过附加反斜杠告诉把手忽略它们:< / p>
{{variable1}} \{{variable2}}
在将variable1
设置为value1
且variable2
未定义的情况下进行编译时,您会得到:
value1 {{variable2}}
(而不是用空字符串替换第二个标记)。
在variable2
设置为value2
的情况下编译第二轮时,您会得到:
value1 value2
不是完美的解决方案(这将是Handlebars单独留下未定义变量的设置),但适用于我的特殊情况。