如何让玉阻止HTML编码元素的属性,并产生一个字符串值?(How to make Jade stop

2019-06-23 13:12发布

UPDATE玉v0.24.0修复了这个有!=语法属性。 option(value!='<%= id %>')


我试图建立一个<option>玉,其中期权的价值是UnderscoreJS模板标记: <%= id %>但我不能得到它的工作,因为玉是我转换文本标记以&lt;= id &gt;

这里是我的玉标记:

script(id="my-template", type="text/template")
  select(id="type")
    &lt;% _.each(deviceTypes, function(type){ %>
    option(value='&lt;%= type.id %>') <%= type.name %>
    &lt;% }) %>

我希望它产生这个网站:

<script id="my-template" type="text/template">
  <select id='type'>
    <% _.each(deviceTypes, function(type){ %>
    <option value="<%= type.id %>"> <%= type.name %> </option>
    <% }) %>
  </select>
</script>

但是我所得到的,而不是,是这样的:

<script id="my-template" type="text/template">
  <select id='type'>
    <% _.each(deviceTypes, function(type){ %>
    <option value="&lt;%= type.id %&gt;"> <%= type.name %> </option>
    <% }) %>
  </select>
</script>

请注意,在非常细微的差别<option>输出线...的value期权的属性已经HTML编码。

如何防止从玉HTML编码这个值? 我需要它来产生文本值,将其与选项的文本做了同样的方式。

Answer 1:

在撰写本文时,我不相信有办法了。 看到这个问题: https://github.com/visionmedia/jade/issues/198

我最终落入原始的HTML来解决它,使用| 字首。



Answer 2:

德里克已经提到,在翡翠加更新新功能的HTML UNESCAPE编码,但我想添加一些增编的人谁可能无法识别。

- var html = "<script></script>"
| !{html} <-- Escaped
| #{html} <-- Encoded

从https://github.com/visionmedia/jade



Answer 3:

此功能已被添加到玉 。 您只需使用!=运算符,如果你想取消转义属性值:

script#my-template(type='text/template')
  a(href!='<%= url =>') Clicky clicky...


Answer 4:

所以我有类似这样的问题,在这里我想创造里面的我玉意见一个一个下划线模板。 一块设置所需的下划线模板的selected属性在一个<option>标记。

起初,我试过有“选择”或“”下划线回报。 不幸的是, 翡翠没有一个方式来显示没有值的属性 ,并没有非转义属性名称(下划线位被回来不带引号)的方式。

幸运的是,你可以取消转义属性的 ,保留引号。

在这个例子中,我选择基于所述所有者类型相匹配的字符串值下拉的值。 我设置一个辅助功能,这样我就不必手动逃脱引号。

- var checkType = function(type) { return "<%= contact.type == '" + type + "' %>" };

.clearfix
  label Title:
  .input
    select(type="text", name="contact[title]", class="new-title")
      option(value="") Choose Title
      option(value="manager", selected="#{ checkType('manager') }") Manager
      option(value="member", selected="#{ checkType('member') }") Member
      option(value="owner", selected="#{ checkType('owner') }") Owner
      option(value="president", selected="#{ checkType('president') }") President
      option(value="individual", selected="#{ checkType('individual') }") Individual
      option(value="main_contact", selected="#{ checkType('main_contact') }") Main Contact

据一些,你应该能够使用!{}这里完全避免所有的编码( <, >, etc. ),然而这并没有对我的版本玉工作。 我用"^0.30"和目前的版本是1.x

如果有人可以验证!{}不会在这种情况下使用最新版本的翡翠工作,我会更新我的答案。



文章来源: How to make Jade stop HTML encoding element attributes, and produce a literal string value?