我怎么能强迫玉佩胡子?

时间:2013-01-04 06:29:43

标签: javascript node.js pug mustache

这是我的jade小雕像:

section#entry-review-template.template(data-class='entry-review')
  table
    thead
      tr
        th='Date'
        th='Title'
        th
    tbody

当我开始添加mustache时,我觉得它开始失去平常的优雅,因为现在她对她脸上的任何毛孔都非常挑剔。

  {{^entries}}
  h1='No Posts'
  div='There are no blog posts to review.'
  {{/entries}}

但是,当我尝试将最后一块小胡子添加到她的身体这一次时,她开始抱怨,她要么打破了,又不想帮忙,或者只是弄得一团糟

{{#entries}}
  tr
    td='{{date}}'
    td='{{title}}'
    td
      a.remove-entry
 {{/entries}}

导致类似这样的事情:

{{^entries}}
<h1>No Posts</h1><div>There are no blog posts to review.</div>{{/entries}}
{{#entries}}
<table><thead><tr><th>Date</th><th>Title</th><th></th></tr></thead><tbody></tbody></table>{{date}}{{title}}<a class="remove-entry"></a>{{/entries}}

我似乎无法让玉正确输出我的小胡子纯文本。

这是一个node.js应用程序,它使用jade在我的服务器端模板化我的视图,我没有将任何模型传递给我的任何视图(我留给客户端那种繁重的工作),但是我仍然需要到处做一堆inclue partial。而且我有很多玉。我有点喜欢玉。我不想放开她。

现在我想在客户端实现非常简单的胡子模板,我希望这些模板在我的视图中内联。

当然,我可以解决它,并将它们放在脚本标签中或用另一个视图引擎渲染它们(现在我想到它,它甚至感觉不是一件容易或简单的事情),但随后我不得不为那些人编写原始的html,我有点想要混合两全其美。

  • 我是否疯狂甚至尝试过?
  • 我怎么能告诉 jade 这只是一款游戏并让她忽略我的{{#must}} {{/ache}}
  • 可以告诉 jade 以某种方式忽略空格吗?
  • 您认为我应该考虑哪些其他选择?

我真的想让玉佩胡子。我知道它很奇怪,但它会让我感动。

更新

我刚尝试使用 | documented here,但即便是最简单的:

section#entry-review-template.template(data-class='entry-review')
  table
    thead
      tr
        th='Date'
        th='Title'
        th
    tbody
      | {{#entries}}
      | {{/entries}}

结束输出:

{{#entries}}
{{/entries}}
<table><thead><tr><th>Date</th><th>Title</th><th></th></tr></thead><tbody></tbody></table><h1></h1>

3 个答案:

答案 0 :(得分:10)

让我们定义一些Jade mixins。

mixin if(name)
  != '{{#' + name + '}}'
  block
  != '{{/' + name + '}}'

mixin unless(name)
  != '{{^' + name + '}}'
  block
  != '{{/' + name + '}}'

mixin each(name)
  != '{{#' + name + '}}'
  block
  != '{{/' + name + '}}'

在Jade模板中流畅地使用它们:

section#entry-review-template.template(data-class='entry-review')
  +unless('entries')
    h1='No Posts'
    div='There are no blog posts to review.'
  table
    thead
      tr
        th='Date'
        th='Title'
        th
    tbody
      +each('entries')
        tr
          td='{{date}}'
          td='{{title}}'
          td
            a.remove-entry

生成一个漂亮的小胡子HTML。

<section id="entry-review-template" data-class="entry-review" class="template">{{^entries}}
  <h1>No Posts</h1>
  <div>There are no blog posts to review.</div>{{/entries}}
  <table>
    <thead>
      <tr>
        <th>Date</th>
        <th>Title</th>
        <th></th>
      </tr>
    </thead>
    <tbody>{{#entries}}
      <tr>
        <td>{{date}}</td>
        <td>{{title}}</td>
        <td><a class="remove-entry"></a></td>
      </tr>{{/entries}}
    </tbody>
  </table>
</section>

答案 1 :(得分:3)

解决方案:jade的 HTML评论

  // {{#entries}}
  tr.entry-row(data-id='{{_id}}')
    td='{{date}}'
    td='{{title}}'
    td
      a.edit(title='Edit')='Edit'
      a.remove(title='Delete')
  // {{/entries}}

就像一个魅力。 之后可以删除评论,但这至少可以解决问题。

答案 2 :(得分:2)

Emblem.js可能是Jade / Moustache方法的替代品,因为它似乎做了类似的事情。但它需要Ember.js