2015-10-08 19 views
10

Sto provando ad utilizzare lodash all'interno di un modello HTML per un messaggio di posta elettronica in Node.js. Ho una matrice con diversi oggetti. Vorrei scorrere ogni oggetto ed elencare tutti i valori ripetuti. Quando utilizzo il codice riportato di seguito, viene visualizzato un errore che indica che il valore non è definito (ad es., ReferenceError: firstName is not defined). Il modello HTML è in un file separato.Come eseguire iterazioni su oggetti all'interno dell'array in Lodash

Qualche idea su cosa sto facendo male?

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

Array:

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

Questi modelli sono EJS? Se è così, tagga la tua domanda di conseguenza. – mik01aj

+0

@ m01 no è solo underscore.js templates – Magus

risposta

1

E 'perché si dà orderInfo[0] al modello. E nella propria matrice, orderInfo[0] è proprio questa parte:

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

Così il modello non può scorrere sui valori mancanti.

+0

Grazie per averlo fatto notare. Ma devo anche fare qualcosa di sbagliato. Perché quando rimuovo '[0]' non viene visualizzato nulla per l'articolo e i valori di costo. – Ken

+0

Se tne [0] stai assegnando l'intero array al modello, devi modificare il modello – Magus

+0

Ho aggiornato il mio modello ma non riesco ancora a scorrere e ottenere i rispettivi valori. Eventuali suggerimenti? – Ken

9

In realtà ci sono un paio di cose che non vanno. A partire con la sintassi del modello, si sta solo specificando l'iteratore per foreach nel modello, ma abbiamo bisogno di dati e iterator sia qualcosa come segue

_.forEach(users, function(user){ 

Inoltre si dispone di più oggetti in posizione di unico array quindi devo aggiornare la struttura JSON un un po 'pure.

Dopo aggiornamenti minori modello di qualcosa di simile con una certa proprietà mancante intenzionalmente,

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

e JSON con gli ordini array in stesso oggetto è la seguente

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

Potete vederlo lavorare sul qui a JSBIN

+0

È necessario modificare la struttura JSON affinché funzioni? – Ken

+0

no non lo è, ma non sono sicuro di come sia possibile avere più oggetti nella posizione di un singolo array, se è possibile sarò felice di saperlo. Un'altra cosa che puoi fare è creare un unico grande oggetto con gli oggetti con nome, ma di nuovo non sai mai quanti oggetti può contenere un singolo ordine –

Problemi correlati