2012-06-20 13 views
7

Ich benutze die _.template() Funktion von undercorejs zusammen mit Backbonejs. Wenn Underscore.js v1.3.0 verwenden, könnte ich eine if-Anweisung wie folgt:Wenn bedingte Anweisungen in Underscore.js

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

Problem: Nach dem v1.3.3 aktualisieren, erhalte ich die Fehler Uncaught SyntaxError: Unexpected token ILLEGAL in der Javascript-Konsole. Wurde diese Funktion entfernt? Das Entfernen des if-Codes behebt den Fehler. Wenn es entfernt wird, gibt es einen anderen Weg, dasselbe zu erreichen?

Antwort

8

In Ihrer if Anweisung haben Sie bereits in den Interpolationsmodus gewechselt, so dass <%= ein unzulässiges Zeichen ist.

Dies funktioniert, wenn ich es in meinem Browser mit 1.3.3

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

Beispiel verwenden:

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

(Wir JSP verwenden, damit unsere Template-Tags {% %} sind, {{ }} und {%- %} statt die Voreinstellungen, also entschuldige meine Tags)

8

tkone hat es richtig aber für eine Vorlage wie du hast, könntest du die verwenden spezielle print function Ihre Tags zu bereinigen:

Sie können auch print aus JavaScript-Code verwenden. Dies ist manchmal bequemer als die Verwendung von <%= ... %>.

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

So konnte man auf den Lärm wie diese abgeholzt:

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

Demo: http://jsfiddle.net/ambiguous/UgATZ/

+0

hatte keine Ahnung über die 'print' Funktion. Lerne jeden Tag etwas Neues! – tkone

+2

@tkone: Du lernst alle möglichen Dinge, indem du die ganze Zeit die Dokumentation in Antworten zitierst :) –

Verwandte Themen