如何使Jade停止HTML编码元素的属性,并产生一个文字string值?

更新 Jade v0.24.0使用!=语法来修复属性。 option(value!='<%= id %>')


我试图用jade创build一个<option> ,其中选项的值是一个UnderscoreJS模板标记: <%= id %>但是我不能让它工作,因为jade将我的标记文本转换为&lt;= id &gt;

这是我的Jade标记:

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

我期望它产生这个HTML:

 <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编码这个值的Jade? 我需要它来产生文字值,就像它与选项文本一样。

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

我最终放弃了原始的HTML解决它,使用| 字首。

Derick已经提到,Jade在更新中为unescape HTML编码添加了新function,但是我想为可能不认识的人添加一些附录。

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

https://github.com/visionmedia/jade

此function已添加到Jade中 。 如果您要忽略属性值,则只需使用!=运算符即可:

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

所以我遇到类似这样的问题,我想在我的一个Jade视图中创build一个Underscore模板。 一个Underscore模板需要在<option>标签中设置selected属性。

最初我试图让下划线返回“select”或“”。 不幸的是, Jade没有办法显示一个没有值的属性,也没有一个非转义的属性名称的方式(Underscore位返回不带引号)。

幸运的是,你可以不使用属性的 ,保留引号。

在这个例子中,我根据匹配string值的所有者typesselect下拉列表的值。 我设置了一个辅助函数,所以我不必手动转义引号。

 - 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. ),但是这并不适用于我的Jade版本。 我使用的是"^0.30" ,当前版本是1.x

如果有人可以validation在这种情况下使用最新版本的Jade工作,我会更新我的答案。