मूंछें एक शीर्ष स्तर सरणी पुनरावृति कर सकते हैं?


109

मेरी वस्तु इस तरह दिखती है:

['foo','bar','baz']

और मैं कुछ इस तरह से उत्पादन करने के लिए एक मूंछ टेम्पलेट का उपयोग करना चाहता हूं:

"<ul><li>foo</li><li>bar</li><li>baz</li></ul>"

पर कैसे? क्या मुझे वास्तव में इसे कुछ इस तरह से बदलना होगा?

{list:['foo','bar','baz']}

जवाबों:


169

आप इसे इस तरह से कर सकते हैं ...

Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>', ['foo','bar','baz']);

यह इस तरह की चीजों के लिए भी काम करता है ...

var obj = [{name: 'foo'}, {name: 'bar'}];
var tmp = '<ul>{{#.}}<li>{{name}}</li>{{/.}}</ul>';
Mustache.render(tmp, obj);

2
वास्तव में टेम्पलेट पहले आता है: Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>',['foo','bar','baz']);
काई कार्वर

उदाहरण के लिए, मुझे सरणी का दूसरा तत्व कैसे मिलता है? मैं मूंछों के साथ {{.1}} करने की कोशिश कर रहा हूं और यह काम नहीं कर रहा है।
तुलीहा

NM, यह पता लगाया: आप बस डॉट्स को अनदेखा कर सकते हैं: इसलिए {{1}} या यदि आप एक लॉजिकल चेक करना चाहते हैं, तो {{# 1}} जो भी {{1}}
yeliha

8
क्या ये सुविधाएँ कहीं दस्तावेज हैं? मैं नहीं देखता {{.}}, {{1}}या मूंछों (5) में ऐसा ही कुछ।
डैनियल लुबरोव

नोट: शीर्ष स्तर सरणी होगन द्वारा समर्थित नहीं है: github.com/twitter/hogan.js/issues/74 । एक संपत्ति के साथ समाधान का उपयोग करें: stackoverflow.com/a/8360440/470117
mems

115

मुझे आज सुबह भी यही समस्या थी और थोड़े से प्रयोग के बाद मैंने पाया कि आप {{}।}} का उपयोग किसी सरणी के वर्तमान तत्व को संदर्भित करने के लिए कर सकते हैं:

<ul>
  {{#yourList}}
  <li>{{.}}</li>
  {{/yourList}}
</ul>

1
#YourList चर का नाम कहां से आया है? क्या आप वास्तविक रेंडरिंग का जावास्क्रिप्ट नमूना दिखा सकते हैं?
इविन

3
आपको "yourList" का उपयोग करने की आवश्यकता नहीं है, आप बस "उपयोग कर सकते हैं"। यहाँ भी: Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>',['foo','bar','baz']);
काई कार्वर

जावास्क्रिप्ट होगा Mustache.render('<ul>{{#.}}{{.}}{{/.}}</ul>', {yourList: ['foo','bar','baz']});
डेन जॉर्डन

1
ध्यान दें, यदि आप कम पठनीय टेम्पलेट चाहते हैं, तो ही ऐसा करें। स्वीकृत उत्तर, यद्यपि "आवश्यक नहीं" एक अधिक पठनीय समाधान है।
टाइमॉक्सली

7
क्या किसी को पता है कि ऐसा क्यों है कि यह जानकारी प्रलेखन से अनुपस्थित है? मूंछें। github.io/mustache.5.html
जोश

5

@ Danjordan के उत्तर पर निर्माण, यह वही करेगा जो आप चाहते हैं:

Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>',['foo','bar','baz']);

लौटने:

<ul><li>foo</li><li>bar</li><li>baz</li></ul>

यह केवल व्यूह के लिए सरणी के लिए काम करता है, असंभव के लिए {a:'foo',b:'bar',c:'baz'}... अनाम संदर्भ कैसे करें जब वस्तुओं पर पुनरावृत्ति हो?
पीटर क्रूस

1

एक टेम्पलेट में बहुआयामी सरणी को प्रस्तुत करने के लिए निम्नलिखित उदाहरण हैं:

उदाहरण 1

'use strict';

var Mustache = require('mustache');

var view = {test: 'div content', multiple : ['foo', 'bar'], multiple_2 : ['hello', 'world']};
var template = '<div>{{test}}</div><ul>{{#multiple}}<li>{{.}}</li>{{/multiple}}</ul><ul>{{#multiple_2}}<li>{{.}}</li>{{/multiple_2}}</ul>';

var output = Mustache.render(template, view);

console.log(output);

उदाहरण 2

'use strict';

var Mustache = require('mustache');

var view = {test: 'div content', multiple : [{name: 'foo', gender: 'male'}, {name: 'bar', gender: 'female'}], multiple_2 : [{text: 'Hello', append: '**', prepend: '**'}, {text: 'World', append: '**', prepend: '**'}]};
var template = '<div>{{test}}</div><ul>{{#multiple}}<li>Hello my name is {{name}}. And I am {{gender}}</li>{{/multiple}}</ul><ul>{{#multiple_2}}<li>{{prepend}}_{{text}}_{{append}}</li>{{/multiple_2}}</ul>';

var output = Mustache.render(template, view);

console.log(output);

टेस्ट रन के लिए, 'test.js' नामक फ़ाइल में ऊपर दिए गए उदाहरणों को सहेजें, कमांडलाइन में निम्नलिखित कमांड चलाएँ

nodejs test.js

-1

मुझे नहीं लगता कि मूंछें ऐसा कर सकती हैं! (आश्चर्यजनक रूप से) आप वस्तुओं की एक सूची पर पुनरावृति कर सकते हैं, और फिर प्रत्येक ऑब्जेक्ट की विशेषताओं तक पहुंच सकते हैं, लेकिन आप मूल्यों की एक सरल सूची पर पुनरावृति नहीं कर सकते हैं!

इसलिए, आपको अपनी सूची को इसमें बदलना होगा:

[ {"value":"foo"},{"value":"bar"},{"value":"baz"} ] 

और फिर आपका टेम्पलेट होगा:

<ul>
  {{#the_list}}
  <li>{{value}}</li>
  {{/the_list}}
</ul>

मेरे लिए, यह मूंछों के साथ एक गंभीर समस्या की तरह लगता है - किसी भी टेम्पलेट प्रणाली को सरल मूल्यों की सूची पर लूप करने में सक्षम होना चाहिए!


4
आपको बस {{}}} का उपयोग करने की आवश्यकता है। नीचे मेरा जवाब देखें।
एंडी हल

2
नीचे-वोट भ्रामक हैं। यह उत्तर सही है कि {{}।} मूंछ मानक का हिस्सा नहीं है, हालांकि यह कुछ कार्यान्वयन द्वारा समर्थित है। ऐसा करने का कोई पोर्टेबल तरीका नहीं है।
येफू

यह सही है, और बहुआयामी प्रतिपादन के लिए बहुत उपयोगी है। कृपया नीचे दिए गए मेरे उदाहरण को देखें
भूपेन्द्र केसवानी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.