快速视图使用HBS条带渲染(消耗?)Handlebars客户端模板

时间:2011-08-27 09:04:26

标签: node.js express

将Express与Don Park的HBS一起用作视图引擎,目的是为客户端和服务器代码使用相同的模板样式。但是我遇到了一些麻烦。

这里显示的是index.hbs,

<h1>{{title}}</h1>
<p>Welcome to {{title}}</p>

<div id="place"></div>

<script id="firstTemplate" type="text/x-handlebars-template">
  <ul>
    {{#lines}}
      <li>{{name}}</li>
    {{/lines}}
  </ul>
</script>

继承人向浏览器呈现的内容:

<h1>Express</h1>
<p>Welcome to Express</p>

<div id="place"></div>

<script id="firstTemplate" type="text/x-handlebars-template">
  <ul>

  </ul>
</script>

Express View渲染过程似乎消耗了用于浏览器的模板块。据我所知,视图渲染器只是将整个file.hbs作为字符串模板进行渲染,而不是将脚本块与服务器视图区分开来。

有关此的任何想法/解决方法吗?

3 个答案:

答案 0 :(得分:1)

我以同样的方式使用Handlebars并遇到了同样的问题。

我通过存储这部分来解决这个问题:

<script id="firstTemplate" type="text/x-handlebars-template">
  <ul>
    {{#lines}}
      <li>{{name}}</li>
    {{/lines}}
  </ul>
</script>

在单独的静态文件中,然后在页面呈现后通过ajax加载它。这样,我的客户端模板不会被Express错误地呈现。

如果有一种方法可以添加一个标记让Express知道忽略这样的块并将它们保留给客户端那么会很好。

答案 1 :(得分:1)

如果把手与Mustache真正兼容,那么这应该有效:

首先将它放在模板顶部的某个位置(在任何模板占位符之前)更改分隔符

{{=<% %>=}}

所以现在你想要服务器呈现的任何东西:

<% foo %>

你想要在客户端呈现的任何东西都是这样的:

{{ bar }}

更多信息位于Mustache手册的底部 - http://mustache.github.com/mustache.5.html

答案 2 :(得分:0)

对于把手,你可以使用反斜杠来逃避双括号,如下所示:

remotes/origin/HEAD