2015-10-08 27 views
10

我想在Node.js中的電子郵件的HTML模板中使用lodash。我有一個包含多個對象的數組。我想遍歷每個對象並列出所有重複值。當我使用下面的代碼時,我收到一個錯誤,指出該值未定義(例如,ReferenceError: firstName is not defined)。 HTML模板位於單獨的文件中。如何遍歷Lodash中的數組中的對象

有關我在做什麼錯的任何想法?

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

陣:

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

這些模板是EJS嗎?如果是這樣,請相應標記您的問題。 – mik01aj

+0

@ m01沒有那只是underscore.js模板 – Magus

回答

1

這是因爲你給orderInfo[0]到您的模板。而你的陣中,orderInfo[0]只是這一部分:

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

所以模板不能缺少的值進行迭代。

+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

是否有必要更改json結構以使其工作? – Ken

+0

不,它不是,但我不知道你如何可以在單個陣列位置有多個對象,如果這是可能的,我會很樂意知道。您可以做的其他事情是創建一個包含命名對象的大對象,但是您再也不知道單個訂單可以包含多少個對象 –