2011-12-27 16 views
15

मैं underscore.js की टेम्पलेटिंग लाइब्रेरी का उपयोग कर रहा हूं, और मुझे यकीन नहीं है कि टेम्पलेट के अंदर तर्क का उपयोग करने के बारे में कैसे जाना है। उदाहरण के लिए, मैं टेम्पलेट में टैग की एक सरणी मुद्रित करना चाहता हूं। इसके लिए सबसे अच्छा तरीका क्या है?underscore.js टेम्पलेट में सरणी मुद्रित करने के लिए कैसे?

जावास्क्रिप्ट:

bunny_data = { 
    name: "sprinkles", 
    age: 1, 
    tags: ['fuzzy','wuzzy'] 
}; 

bunny_view = $("#bunny-template").html(); 
$(body).append(_.template(bunny_view,bunny_data)); 

टेम्पलेट:

<script type='text/template'> 
    <div> 
    <h5><% = name %></h5> 
    <ul class='tag-list'> 
     <!-- How do I print the tags here? --> 
    </ul> 
    </div> 
</script> 

उत्तर

30

आपको @को @ केन सुझाव के रूप में encapsulate करने की आवश्यकता नहीं है, आप सही रास्ते पर थे। चाहे आप _. फ़ंक्शंस को कॉल करना चाहते हैं या बस सादा जावास्क्रिप्ट संरचनाओं का उपयोग करना आपके ऊपर है, लेकिन अंडरस्कोर टेम्पलेट्स में कोई अंतर्निहित प्रवाह संरचना नहीं है, ऐसा करने के लिए कि आप केवल कोड एम्बेड करें (आप eco या Mustache या देखना चाहते हैं या अगर आप चाहते हैं तो कुछ)। निम्नलिखित जावास्क्रिप्ट के साथ

<script type='text/template' id="bunny-template"> 
    <div> 
    <h5><%= name %></h5> 
    <ul> 
     <% for(var tag in tags) { %> 
      <li><%= tags[tag] %></li> 
     <% } %> 
    </ul> 
    </div> 
</script> 

:

मेरे उदाहरण (लगभग एक ही के रूप में आप के मालिक हैं) इस तरह दिखता है

bunny_data = { 
    name: "sprinkles", 
    age: 1, 
    tags: ['fuzzy','wuzzy'] 
}; 

bunny_view = $("#bunny-template").html(); 
$(body).append(_.template(bunny_view, bunny_data)); 

आप सत्यापित कर सकते हैं कि यह here चलाता है।

(व्यक्तिगत वरीयता नोट पर, मैं इस कारण से टेम्पलेट को छोड़कर सभी अंडरस्कोर का भारी उपयोगकर्ता हूं, यदि आपके पास अधिक जटिल उपयोग है तो मुझे उस कोड की मात्रा से सहज नहीं है मामला)। इसलिए html में आप

<ul> 
    <li><%= tags.join('</li><li>') %></li> 
</ul> 

jsFiddle पर यह चेक करना होगा

+0

<%=%> और <%%> के बीच क्या अंतर है? – Allen

+3

<%= %> इसके परिणाम के अंदर अभिव्यक्ति को आउटपुट आउटपुट करता है, <% %> बस इसके क्लॉज के अंदर कोड निष्पादित करता है (यदि आप <% %> में 'वापसी' करते हैं, तो यह कार्यात्मक रूप से <%= %> के बराबर होगा)। E.g: <% 'foo' %> आउटपुट कुछ भी नहीं, <%= 'foo' %> आउटपुट 'foo'। –

+0

जैकब ऑस्करसन का सबसे अच्छा तरीका है लेकिन यह अब अप्रचलित है। नया जावास्क्रिप्ट निम्नलिखित जावास्क्रिप्ट के साथ होना चाहिए: bunnyview = _.template ($ ("# bunny-template")। Html()); $ (बॉडी)।संलग्न (bunnyview (bunny_data)); – Cantinos

8

ऐसा लगता है कि आप अपने जावास्क्रिप्ट में ठीक से bunny_data की स्थापना नहीं कर रहे हैं।

बजाय:

$(body).append(_.template(bunny_view,bunny_data)); 

प्रयास करें:

$(body).append(_.template(bunny_view, { bunny_data: bunny_data })); 

प्रिंट अपने खाके में डेटा (नोटिस मैं <%= name %> में% के बाद अंतरिक्ष से हटाया):

<script type='text/template'> 
    <div> 
    <h5><%= name %></h5> 
    <ul class='tag-list'> 
     <% _.each(bunny_data, function(bd) { %> 
     <li><%= bd.name %></li> 
     ... 
     <% }); %> 
    </ul> 
    </div> 
</script> 

उम्मीद है कि कि मदद करता है.

7

इसके अलावा join चाल करना होगा।

+1

कोई अपराध नहीं है, लेकिन '

  • ' '' प्रति आइटम '' 'प्रति आइटम बहुत हैकी – Kristian

  • +0

    है, यह है, @ क्रिस्टियन –

    +0

    हैकी लेकिन सबसे संक्षिप्त –

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