如何在玉石模板中逃避花括号?

时间:2012-03-15 21:17:27

标签: templates node.js escaping pug curly-braces

我可以在玉石teplate内逃脱花括号吗? (我在node.js中使用jade)

我想将jQuery模板呈现给客户端。 我要逃避的部分看起来像这样:

div(class='clear')
script(id='BoardListTemplate', type='text/x-jQuery-tmpl')
  <p>${Title}</p>
  <ul id="${Id}" class="IterationBoardList">
    <li class="AddNewItem">Add new Item</li>
    {{tmpl(Items) "#BoardListItemTemplate"}}
  </ul>
script(id='BoardListItemTemplate', type='text/x-jQuery-tmpl')
  <li class="Item" id="${{$data.Id}}">
    ${$data.Description}<br />
    Assigned to: ${$data.AssignedTo}<br/>
  StoryPoints: ${$data.StoryPoints}</li>
script(src='/javascripts/Scrummr.Engine.js', id='BoardListItemTemplate', type='text/javascript')
非常感谢

3 个答案:

答案 0 :(得分:11)

您必须在脚本块内的每一行前面使用竖线(|)符号。

有关示例,请参阅https://gist.github.com/2047079

答案 1 :(得分:3)

这里有两件不同的事情。

Jade使用空格来暗示文档结构;缩进很重要,换行很重要,Jade希望每一行都能从它创建HTML标签开始。

如果您想要提供一些您不希望它转换的东西 - 例如,原始HTML或脚本或您希望在客户端上呈现的原始模板 - 您可以

1)用竖线字符(|)开始每一行,然后是原始文本。 Jade docs的示例:

p
  | foo bar baz
  | rawr rawr
  | super cool
  | go jade go

2)通过用句点结束前一个容器标签来启动原始文本块。例如,再次来自Jade docs:

p.
  foo asdf
  asdf
   asdfasdfaf
   asdf
  asd.

另外,Jade执行字符串插值,专门处理某些字符或字符,您可能需要在不希望插值的上下文中进行转义。这是这个问题的一部分(逃避花括号)。翡翠实际上并没有特别对待{但是它确实对待#{如果你需要#{,你可以将其作为\#{。

转义

答案 2 :(得分:0)

Jade在行的末尾提供了一个点(。)运算符,允许您转义子缩进块内的所有内容。

script(id='BoardListTemplate', type='text/x-jQuery-tmpl').
  // Everything inside here is completely escaped.
  <p>${Title}</p>
  <ul id="${Id}" class="IterationBoardList">
    <li class="AddNewItem">Add new Item</li>
    {{tmpl(Items) "#BoardListItemTemplate"}}
  </ul>

- // outside here it's all JADE.
h1 How about a JADE heading

script(id='BoardListItemTemplate', type='text/x-jQuery-tmpl').
  // back to escaped script in here.
  <li class="Item" id="${{$data.Id}}">
    ${$data.Description}<br />
    Assigned to: ${$data.AssignedTo}<br/>
  StoryPoints: ${$data.StoryPoints}</li>

script(src='/javascripts/Scrummr.Engine.js', id='BoardListItemTemplate', type='text/javascript').

最后的DOT(。)是重要的部分。