【问题标题】:How can I escape curly braces inside jade templates?如何在玉模板中转义花括号?
【发布时间】:2024-01-06 12:47:01
【问题描述】:

我可以避开玉石板内的花括号吗? (我在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')

非常感谢

【问题讨论】:

  • 您尝试过使用html实体&amp;#123;&amp;#125;吗?

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


【解决方案1】:

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

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

【讨论】:

  • 我想指出,虽然这个答案很有帮助且真实,但它实际上并不是对问题中“如何转义大括号”部分的答案。
【解决方案2】:

这里发生了两种不同的事情。

Jade 使用空格来暗示文档结构;缩进很重要,换行很重要,Jade 希望每一行都以它会创建 HTML 标记的内容开头。

如果你想给它一些你不希望它转换的东西——例如,你想在客户端呈现的原始 HTML 或脚本或原始模板——你也可以

1) 每行以竖线字符 (|) 开头,后跟原始文本。来自Jade docs的示例:

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

2) 通过以句点结束前一个容器标签来开始一个原始文本块。示例,再次来自 Jade 文档:

p.
  foo asdf
  asdf
   asdfasdfaf
   asdf
  asd.

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

【讨论】:

  • \#{{search.players}} 是我要找的...谢谢@metamat
【解决方案3】:

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').

最后的点 (.) 是重要的部分。

【讨论】: