2

JsRender [1]には、ページの一部を生成するためのカスタムタグ{{tagdata/}}があります。http://borismoore.github.com/jsrender/demos/step-by-step/03_converters-and-encoding.htmlによると、{{:value}}を使用して値からHTMLをレンダリングすることもできます。

ただし、JsViews [2]では、変換関数がHTMLタグを生成する場合、タグのデータリンク属性に式を配置する必要があります(例:

<div data-link="{:~conv(data)}" />

ここで、convはHTMLタグを生成します

function conv(data) { return '<b>' + data + '</b>'; }

)、DOMに挿入されると、出力はフィルタリングされます(つまり、太字ではなく「 ... 」として出力されます)。JsViewsでこの関数を無効にして、ヘルパー関数に最新データのマークアップを生成させるにはどうすればよいですか?

前もって感謝します!

[1] https://github.com/BorisMoore/jsrender
[2] https://github.com/BorisMoore/jsviews

4

1 に答える 1

2

デフォルトでは、 (またはなどdivのフォーム要素以外の要素)などのHTML要素のデータリンクのデフォルトのターゲットはです。したがって、文字列内のHTMLマークアップは、HTML要素としてDOMに挿入されるのではなく、マークアップとしてレンダリングされます。 。(ブラウザによるHTMLエンコーディングに相当します。)inputselectinnerText

ただし、別のターゲット'attrib'を設定して、たとえば、

<div data-link="title{:~conv(data)}" />

titleのプロパティをターゲットにするにはdiv、または

<div data-link="css-background-color{:~conv(data)}" />

背景色のスタイルをターゲットにします。

あなたのシナリオのためにあなたは書くことができます

<div data-link="html{:~conv(data)}" />

ターゲットにinnerHTML。これにより、データ、コンバーター、またはヘルパーの出力をHTML要素としてDOMに挿入できます。(もちろん安全性は低いです...)。

ところで、次のようにコンバーターを追加することもできます。

<div data-link="html{myCnvt:~conv(data)}" />

次のように、コンバーターとしてhtmlエンコーダーを使用する場合、完全に一周します。

<div data-link="html{html:~conv(data)}" />

これは、省略形で書くこともできます。

<div data-link="html{>~conv(data)}" /> 次に、実際に使用しますinnerHTMLが、挿入前にHTMLエンコーディングを追加します。

于 2012-11-11T18:28:29.337 に答える