Lodash

2015-10-08 23 views
10

içinde dizinin içindeki nesneler arasında yineleme nasıl Node.js. bir e-posta için bir HTML şablonu içinde lodash kullanmaya çalışıyorum Birkaç nesneye sahip bir dizim var. Her bir nesneyi tekrarlamak ve yinelenen tüm değerleri listelemek istiyorum. Aşağıdaki kodu kullandığımda, değerin undefined olduğunu belirten bir hata alıyorum (ör. ReferenceError: firstName is not defined). HTML şablonu ayrı bir dosyada.Lodash

Neyi yanlış yaptığım hakkında bir fikrin var mı?

JavaScript:

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><% }); %> 

Dizisi: Şablonunuza orderInfo[0] vermek çünkü

[ 
    { 
    "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

Bu şablonlar EJS? Öyleyse, lütfen sorunuza uygun şekilde etiketleyin. – mik01aj

+0

@ m01 hayır bu sadece underscore.js şablonları – Magus

cevap

1

öyle.

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

Yani şablon eksik değerler üzerine yineleme edemez: Ve dizide, orderInfo[0] sadece bu parçasıdır.

+0

Bunu işaretlediğiniz için teşekkür ederiz. Ama ben de yanlış bir şey yapmalıyım. Çünkü '[0]' ı kaldırdığımda, öğe ve maliyet değerleri için hiçbir şey gösterilmiyor. – Ken

+0

tne [0] öğesini kaldırırsanız, dizinin tamamını dizenize verirsiniz, böylece şablonunuzu değiştirmelisiniz – Magus

+0

Şablonumu güncelledim, ancak yine de yineleme yapamıyorum ve ilgili değerleri elde edemiyorum. Baska öneri? – Ken

9

Aslında burada yanlış olan birkaç şey var. Şablon sözdizimi ile başlayarak, yalnızca şablonunda foreach yineleyici belirterek, ancak Ayrıca ben json yapısı a güncellemek zorunda böylece tek dizi konumunda birden çok nesne var

_.forEach(users, function(user){ 

aşağıdaki gibi veri ve yineleyici hem şeye ihtiyacım biraz da. minör güncellendikten sonra

aynı nesnede siparişler diziler ile

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>'); 

ve 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, 
     } 
    ] 
    } 
] 
}; 

Sen burada çalışan görebilirsiniz aşağıda olduğu gibi bazı özellik kasten eksik böyle bir şey şablona JSBIN

+0

Bunun çalışması için json yapısını değiştirmek gerekli mi? – Ken

+0

hayır değil ama tek dizili pozisyonda birden fazla nesneye sahip olabileceğinizden emin değilim, Eğer bu mümkün olursa, bilmek mutluluk duyarız. Yapabileceğiniz diğer bir şey, içinde adlandırılmış nesnelerle büyük bir nesne oluşturmaktır, ancak yine de tek bir siparişin kaç tane nesne içerebileceğini asla bilemezsiniz. –

İlgili konular