web-dev-qa-db-ja.com

underscore.jsテンプレート内の変数

underscore.js で構築されたアプリの backbone.js テンプレート内に変数を設定する方法は?再利用可能な処理済み文字列を作成したいだけです。また、 underscore.js のような_.escapeの組み込み関数を使用して、これらの変数を処理できますか?

<script type="text/html" id="templateresults">

<p><%= encodeURIComponent(title) %></p> // this works

// try 1:
var encodedTitle = encodeURIComponent(title); // shows up as regular text
<p>'+encodedTitle+'</p> // this doesn't work and shows up as regular text

// try 2:
<% var encodedTitle = encodeURIComponent(title); %> // nothing shows up
<p><% '+encodedTitle+' %></p> // nothing shows up

</script>

titleはJSONアイテム(テキスト文字列)です。

エンコードされた出力:This%20is%20a%20Sample%20Title
通常の出力:This is a Sample Title

15
Steve

Try 2はほぼ正しいですが、encodedTitleを出力するタグには、先頭に_=_がなく、文字列に_+_は必要ありません。する必要があります:

_<p><%= encodedTitle %></p>
_

または、次のこともできます。

_<p><% print(encodedTitle) %></p>
_

アンダースコアテンプレートでは、評価するJavaScriptを_<% %>_内に含める必要があります。したがって、2回目の試行でJavaScriptが文字列として出力されるのはなぜですか。上部のサンプルで_=_を正しく使用しましたが、try2では省略しました。

_=_は、囲まれたjavascriptの結果を文字列として出力するようにテンプレートエンジンに指示します。 _=_を使用しない場合、javascriptは実行されますが、何も出力されません。アンダースコアのテンプレートは、_=_を使用する代わりにprint()関数を提供しますが、一方の方法がもう一方の方法よりも優れているかどうかはわかりません。

20
Endophage