39

UPDATE Jade v0.24.0は!=、属性の構文でこれを修正します。option(value!='<%= id %>')


<option>オプションの値がUnderscoreJSテンプレートマーカーであるwithjadeを作成しようとしていますが、 <%= id %>jadeがマーカーテキストをに変換しているため、機能させることができません&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;% }) %>

私はそれがこの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エンコードされています。

Jadeがこの値をHTMLエンコードしないようにするにはどうすればよいですか?オプションのテキストと同じように、リテラル値を生成するために必要です。

4

4 に答える 4

103

Derickは、Jadeが更新時にエスケープ解除HTMLエンコーディングの新機能を追加したことをすでに述べましたが、認識できない可能性のある人のためにいくつかの補遺を追加したいと思います。

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

https://github.com/visionmedia/jadeから

于 2012-10-03T14:07:49.403 に答える
35

この機能はJade に追加されました。属性値をエスケープ解除する場合は、単純に!=演算子を使用します。

script#my-template(type='text/template')
  a(href!='<%= url =>') Clicky clicky...
于 2013-01-10T23:48:02.377 に答える
5

この記事を書いている時点では、それを実現する方法はないと思います。この問題を参照してください: https://github.com/visionmedia/jade/issues/198

| を使用して、生の HTML にドロップして解決しました。プレフィックス。

于 2012-04-11T18:09:21.093 に答える
0

そのため、Jade ビューの 1 つに Underscore テンプレートを作成したいという、これと同様の問題がありました。タグでselected属性を設定するために必要な Underscore テンプレートの一部。<option>

最初に、アンダースコアが「選択済み」または「」を返すようにしようとしました。残念ながら、Jade には値のない属性を表示する方法がなく、属性名をエスケープしない方法もありません (アンダースコア ビットは引用符なしで戻ってきました)。

幸いなことに、引用符を保持したまま、属性のをアンエスケープすることができます。

この例では、文字列値に一致する所有者タイプに基づいてドロップダウンの値を選択しています。引用符を手動でエスケープする必要がないように、ヘルパー関数を設定しました。

- 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.

!{}最新バージョンのジェイドを使用してこの状況で動作することを誰かが確認できれば、回答を更新します。

于 2014-04-24T17:36:17.083 に答える