如何使Jade停止HTML编码元素的属性,并产生一个文字string值?
更新 Jade v0.24.0使用!=
语法来修复属性。 option(value!='<%= id %>')
我试图用jade创build一个<option>
,其中选项的值是一个UnderscoreJS模板标记: <%= id %>
但是我不能让它工作,因为jade将我的标记文本转换为<= id >
。
这是我的Jade标记:
script(id="my-template", type="text/template") select(id="type") <% _.each(deviceTypes, function(type){ %> option(value='<%= type.id %>') <%= type.name %> <% }) %>
我期望它产生这个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="<%= type.id %>"> <%= 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
此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工作,我会更新我的答案。