Pug(前身为Jade)变量在锚点href内部没有正确工作(插值)。

16

我正在使用Node和Express,使用Pug(以前的Jade)模板引擎来呈现我的html。一切都很顺利,直到我开始尝试将变量注入到我的锚链接的href中。奇怪的是,如果我将Express应用程序的view engine更改为jade,则事情就会按预期工作。

根据我阅读过的其他文章,问题似乎是一个内插问题,但我似乎找不到一个资源或文档来正确解决这个问题。

例如:

我正在从一个rooms json数组中提取数据,然后使用for循环遍历每个数组元素并输出每个房间的数据。使用jade,以下内容有效。

table.table.table-striped
  thead
    tr
      th Name
      th Id
  tbody
    each room in rooms
      tr
        td(style="width: 50px;")
          a(href!="/admin/rooms/delete/#{room.id}") Delete
        td #{allTitleCase(room.name)}
        td #{room.id}

使用 pug 时上述代码不能正常工作。特别地,a(href='/admin/rooms/delete/#{room.id}') Delete 链接无法正常工作。它会将房间 id 直接输出到链接的 href 结尾部分,而不是将其注入其中。

有什么方法可以在 pug 中修复这个问题吗?

请注意,我已经尝试了以下所有选项,但都没有起作用:

  • a(href="/admin/rooms/delete/#{room.id}") Delete
  • a(href!="/admin/rooms/delete/#{room.id}") Delete
1个回答

26

更新:Pug 2.0 对插值处理方式进行了重大更改。

根据 变更日志,下列任何一种方法应该可以使用:

// to solve OP's problem, the following can be used:
a(href="/admin/rooms/delete/" + room.id) Delete

// Here are a few additional scenarios which use the new API 
// for anyone stumbling across this answer in the future
- var href = "/admin/rooms/delete/" + room.id;
a(href=href)
a(href=`${href}`) // Node.js/io.js ≥ 1.0.0
a(href=href + '?foo=bar')

1
谢谢您的帮助,不幸的是这对我没有用。虽然它在jade-lang网站上起作用了,但似乎在我的Express应用程序中运行pug作为view engine时并不起作用。我认为它在jade-lang网站上工作是因为那实际上使用的是jade而不是pug - Corey
2
你是否阅读过 Pug 2.0变更日志? - pdoherty926
在你建议的查看更改日志之后,我弄清楚了...我将锚点链接更改为 a(href="/admin/rooms/delete/" + room.id) Delete,这样就可以了。感谢您的帮助,我很感激。您能否编辑您的答案以包含正确的代码?如果可以的话,我将标记您的答案为正确。 - Corey
1
@Corey OK - 已更新。我留下了额外的示例,以供将来遇到此问题的其他人参考。 - pdoherty926

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接