7

underscorejsの_.template()機能を backbonejs と併用しています。underscore.js v1.3.0 を使用する場合、次のifようなステートメントを使用できます。

<script type="text/template" id="tpl_listing_list_item">
    <% if(<%= address_2 %>){%>, <%= address_2 %><%}%>
</script>

問題: v1.3.3 に更新した後Uncaught SyntaxError: Unexpected token ILLEGAL、Javascript コンソールにエラーが表示されます。この機能は削除されましたか? コードを削除ifすると、エラーが修正されます。削除された場合、同じことを達成する別の方法はありますか?

4

2 に答える 2

8

あなたのifステートメントでは、すでに補間モードにエスケープしているため、<%=は不正な文字です。

これは、ブラウザで 1.3.3 を使用すると機能します。

<script type="text/template" id="tpl_listing_list_item">
    <% if(address_2){ %>, <%= address_2 %> <% } %>
</script>

例:

var t = _.template('{% if(address_2){ %}, {{ address_2 }} {% } %}')
undefined
t({'address_2': 'test'});
", test "

(JSP を使用しているため、テンプレート タグはデフォルトではなく{% %}{{ }}、およびになっているので、タグを許してください){%- %}

于 2012-06-20T16:01:02.330 に答える
8

tkoneは正しいですが、あなたのようなテンプレートの場合は、特別なprint関数を使用してタグをクリーンアップできます。

printJavaScript コード内から使用することもできます。これは、 を使用するよりも便利な場合があります<%= ... %>

var compiled = _.template("<% print('Hello ' + epithet); %>");
compiled({epithet: "stooge"});
=> "Hello stooge."

したがって、次のようにノイズを減らすことができます。

<script type="text/template" id="tpl_listing_list_item">
    <% if(address_2){ print(', ', address_2) } %>
</script>

デモ: http://jsfiddle.net/ambiguous/UgATZ/

于 2012-06-20T16:46:57.980 に答える