有没有办法忽略Handlebars模板中的Handlebars模板?

Zac*_*tes 4 node.js handlebars.js

我在我的服务器端节点应用程序中使用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>
Run Code Online (Sandbox Code Playgroud)

不幸的是,把手试图在#more-template脚本块中渲染这些东西.(这只是删除了{{more}}因为它在服务器模板的上下文中未定义.

有没有办法可以让它忽略脚本标签内的东西?(这样客户端模板就可以使用它)

我已经看到了这个问题:在服务器和客户端上使用Handlebars.js的Node.js,我宁愿只使用1个模板引擎.

小智 6

一般情况下,当您的模板被编译两次时(例如,当您只是服务器端)并且您想在第一次运行时忽略模板标签时,您可以通过附加反斜杠简单地告诉把手忽略它们:

{{variable1}} \{{variable2}}
Run Code Online (Sandbox Code Playgroud)

使用variable1set to value1variable2undefined进行编译时,您会得到:

value1 {{variable2}}
Run Code Online (Sandbox Code Playgroud)

(而不是用空字符串替换第二个标记).

当使用variable2set to 编译第二次运行时value2,您会得到:

value1 value2
Run Code Online (Sandbox Code Playgroud)

不是完美的解决方案(这将是Handlebars单独留下未定义变量的设置),但适用于我的特殊情况.


Zac*_*tes 5

所以我没有找到一种方法来轻松忽略客户端模板,但普遍的共识是预编译您的客户端模板.

  1. 全局安装把手 npm install handlebars -g
  2. 预编译模板 handlebars client-template1.handlebars -f templates.js
  3. 包括templates.js <script src="templates.js"></script>
  4. 执行模板 var html = Handlebars.templates["client-template1"](context);

额外信息
使用Handlebars.js(jQuery Mobile环境)的预编译模板
http://handlebarsjs.com/precompilation.html