2015-10-08 16 views
10

में सरणी के भीतर ऑब्जेक्ट्स के माध्यम से पुनरावृत्ति कैसे करें I Node.js. में किसी ईमेल के लिए HTML टेम्पलेट के भीतर लॉनाश का उपयोग करने का प्रयास कर रहा हूं। मेरे पास कई वस्तुओं के साथ एक सरणी है। मैं प्रत्येक ऑब्जेक्ट के माध्यम से पुनरावृत्त करना चाहता हूं और सभी दोहराने वाले मूल्यों को सूचीबद्ध करना चाहता हूं। जब मैं नीचे दिए गए कोड का उपयोग करता हूं, तो मुझे यह बताते हुए एक त्रुटि प्राप्त होती है कि मान अपरिभाषित है (उदा।, ReferenceError: firstName is not defined)। एचटीएमएल टेम्पलेट एक अलग फाइल में है।लोडाश

मैं क्या गलत कर रहा हूं पर कोई विचार?

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

var template = fs.readFileSync('server/views/email-template.html').toString(); 
var htmlAll = _.template(template)(orderInfo); 

HTML:

<% _.forEach(function(firstName) { %><%- firstName %></td><% }); %> <% _.forEach(function(lastName) { %><%- lastName %></td><% }); %> 
<% _.forEach(function(address) { %><%- address %></td><% });%> 
<% _.forEach(function(city) { %><%- city %><% }); %>, <% _.forEach(function(state.code) { %><%- state.code %><% }); 
%> <% _.forEach(function(zip) { %><%- zip %><% }); %> 

<% _.forEach(function(item) { %><td><%- item %></td><% }); %> 
<% _.forEach(function(cost) { %><td><%- cost %></td><% }); %> 

सरणी:

[ 
    { 
    "firstName": "John", 
    "lastName": "Doe", 
    "address": "123 Broadway", 
    "city": "New York", 
    "state": { 
     "code": "NY", 
     "state": "New York" 
    }, 
    "zip": "10001", 
    }, 

    { 
    "color": "White", 
    "size": "M", 
    "item": "T-Shirt", 
    "cost": 19.99, 
    }, 
    { 
    "color": "Blue", 
    "size": "L", 
    "item": "T-Shirt", 
    "cost": 19.99, 
    } 
] 
+0

क्या ये टेम्पलेट्स ईजेएस हैं? यदि ऐसा है, तो कृपया तदनुसार अपने प्रश्न को टैग करें। – mik01aj

+0

@ m01 नहीं, यह सिर्फ underscore.js टेम्पलेट्स – Magus

उत्तर

1

यह है क्योंकि आप अपने टेम्पलेट को orderInfo[0] देना है।

{ 
    "firstName": "John", 
    "lastName": "Doe", 
    "address": "123 Broadway", 
    "city": "New York", 
    "state": { 
     "code": "NY", 
     "state": "New York" 
    }, 
    "zip": "10001", 
} 

तो टेम्पलेट लापता मूल्यों पर पुनरावृति नहीं कर सकते हैं: और अपने सरणी में, orderInfo[0] सिर्फ इस हिस्सा है।

+0

इंगित करने के लिए धन्यवाद। लेकिन मुझे कुछ और गलत भी करना होगा। क्योंकि जब मैं '[0]' को हटाता हूं तो आइटम और लागत मानों के लिए कुछ भी प्रदर्शित नहीं होता है। – Ken

+0

यदि आप tne को हटाते हैं [0] आप अपने सरणी को संपूर्ण सरणी दे रहे हैं तो आपको अपना टेम्पलेट – Magus

+0

बदलना होगा मैंने अपना टेम्पलेट अपडेट किया है लेकिन मैं अभी भी इसके मूल्यों को फिर से भरने और प्राप्त करने में सक्षम नहीं हूं। कोई सुझाव? – Ken

9

वास्तव में यहां कुछ चीजें गलत हैं। टेम्पलेट वाक्य रचना के साथ शुरू, आप केवल अपने टेम्पलेट में foreach के लिए इटरेटर को निर्दिष्ट कर रहे हैं, लेकिन हम डेटा और इटरेटर दोनों कुछ चाहिए के रूप में

_.forEach(users, function(user){ 

इसके अलावा, आप एक सरणी की स्थिति में एक से अधिक ऑब्जेक्ट है तो मैं json संरचना एक अद्यतन है इस प्रकार है थोड़ा सा भी।

नाबालिग अपडेट होने के बाद कुछ संपत्ति जानबूझकर गायब साथ कुछ इस तरह टेम्पलेट,

var tmpl = _.template('<ul><% _.forEach(users, function(user) { %><li><%- user.firstName %></li><li><%- user.address %></li><li><%- user.state.code %></li><li><%- user.state.state %></li><ol> <% _.forEach(user.orders, function(order) { %> <li><span><%- order.item %><span> cost is: <span><%- order.cost %><span></li> <% }); %> </ol> <% }); %></ul>'); 

और json एक ही वस्तु में आदेश सरणियों के साथ के रूप में

var data = { 'users': 

     [ 
    { 
    "firstName": "John", 
    "lastName": "Doe", 
    "address": "123 Broadway", 
    "city": "New York", 
    "state": { 
     "code": "NY", 
     "state": "New York" 
    }, 
    "zip": "10001", 
    "orders": [ 
     { 
      "color": "White", 
      "size": "M", 
      "item": "T-Shirt", 
      "cost": 19.99, 
     }, 
     { 
      "color": "Blue", 
      "size": "L", 
      "item": "Pant", 
      "cost": 19.99, 
     } 
    ] 
    } 
] 
}; 

आप इसे यहाँ पर काम कर देख सकते हैं इस प्रकार है JSBIN

+0

क्या यह काम करने के लिए जेसन संरचना को बदलना आवश्यक है? – Ken

+0

नहीं, लेकिन मुझे यकीन नहीं है कि आप एकल सरणी स्थिति पर एकाधिक ऑब्जेक्ट्स कैसे प्राप्त कर सकते हैं, यदि यह संभव है तो मुझे जानकर खुशी होगी। अन्य चीज जो आप कर सकते हैं वह नामित वस्तुओं के साथ एक बड़ी वस्तु बना रही है लेकिन फिर आप कभी नहीं जानते कि एक ही ऑर्डर में कितनी ऑब्जेक्ट हो सकती हैं –

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