2012-06-20 15 views
7

में सशर्त बयान मैं एक साथ underscorejs की _.template() समारोह का उपयोग कर backbonejs साथ कर रहा हूँ है। Underscore.js v1.3.0 का उपयोग कर, मैं एक if बयान दिखाया गया है इस्तेमाल कर सकते हैं:Underscore.js

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

समस्या: v1.3.3 को अद्यतन करने के बाद, मैं Javascript कंसोल में त्रुटि Uncaught SyntaxError: Unexpected token ILLEGAL मिलता है। क्या यह सुविधा हटा दी गई है? if कोड को निकालने से त्रुटि ठीक होती है। अगर इसे हटा दिया गया है, तो क्या वही चीज़ हासिल करने का दूसरा तरीका है?

उत्तर

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 उपयोग करती हैं इसलिए हमारे टेम्पलेट टैग {% %}, {{ }}, और {%- %} के बजाय कर रहे हैं चूक है, तो मेरे टैग बहाना)

8

tkone यह सही है, लेकिन जैसे आप किसी टेम्पलेट के लिए, आप इस्तेमाल कर सकते हैं अपने टैग को साफ़ करने के लिए विशेष print function:

आप जावास्क्रिप्ट कोड से print का भी उपयोग कर सकते हैं। <%= ... %> का उपयोग करने से यह कभी-कभी अधिक सुविधाजनक होता है।

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/

+0

'print' समारोह के बारे में कोई सुराग नहीं था। प्रति दिन कुछ नया सीखें! – tkone

+2

@ टकोन: आप हर समय उत्तर में दस्तावेज़ीकरण उद्धृत करके सभी प्रकार की चीजें सीखते हैं :) –

संबंधित मुद्दे