[〜#〜] update [〜#〜] Jade v0.24.0は、属性の_!=
_構文でこれを修正します。 option(value!='<%= id %>')
私は_<option>
_をjadeで構築しようとしています。オプションの値はUnderscoreJSテンプレートマーカーです:_<%= id %>
<= id >
_。
これが私のジェイドマークアップです。
_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エンコードされています。
Jadeがこの値をHTMLエンコードしないようにするにはどうすればよいですか?オプションのテキストと同じ方法で、リテラル値を生成する必要があります。
この記事を書いている時点では、それへの道があるとは思わない。この問題を参照してください: https://github.com/visionmedia/jade/issues/198
|を使用して、それを解決するために生のHTMLにドロップしました。プレフィックス。
Derickは既にJadeがunescape HTMLエンコーディングの新機能をアップデートに追加したことを言及しましたが、認識できないかもしれない人のためにいくつかの補遺を追加したいと思います。
- var html = "<script></script>"
| !{html} <-- Escaped
| #{html} <-- Encoded
この機能は Jadeに追加 です。属性値をエスケープ解除する場合は、単に!=
演算子を使用します。
script#my-template(type='text/template')
a(href!='<%= url =>') Clicky clicky...
だから私はこれに似た問題を抱えていて、Jadeビューの1つにアンダースコアテンプレートを作成したかったのです。 <option>
タグのselected
属性を設定するために必要なUnderscoreテンプレートの一部。
最初は、アンダースコアに「選択済み」または「」を返させました。残念ながら、 Jadeには値のない属性を表示する方法はありません であり、属性名をエスケープしない方法はありません(アンダースコアビットは引用符なしで戻ってきました)。
幸いなことに、引用符を保持したまま、属性のvalueをエスケープ解除できます。
この例では、文字列値に一致する所有者タイプに基づいてドロップダウンの値を選択しています。手動で引用符をエスケープする必要がないように、ヘルパー関数を設定します。
- 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
です。
誰かが!{}
がJadeの最新バージョンを使用してこの状況で機能することを確認できる場合、回答を更新します。