2016-05-17 175 views
2

我正在試圖在EJS部分內的「默認」中,在我的JSON文件中循環每個條目。遍歷ejs部分中的JSON對象

{ 
    "default": { 
     "1": { 
      "id": "alertmessages", 
      "title": "Your Messages", 
      "subtitle": "Tasks waiting for your attention", 
      "image": "alert.png", 
     }, 
     "2": { 
      "id": "uploadr", 
      "title": "Upload", 
      "subtitle": "Upload", 
      "image": "baskets.png", 
     }, 
     etc............ 
    } 
} 

我正在將此JSON文件讀入我的node.js中,解析它並使其可用於我的儀表板視圖。如下面

var jsondata = JSON.parse(require('fs').readFileSync('./app/routes/dashboard/buttons.json', 'utf8')); 

var content = { 
    title: 'Dashboard', 
    user: req.user, 
    buttonsdata: jsondata 
}; 
res.render('dashboard', content); 

我的儀表板視圖,包括部分的EJS其中我試圖遍歷默認內包含(此數量可以變化)的所有對象。我想在沒有Jquery的情況下這樣做。但無法獲得我在其他主題上找到的任何建議。

console.log("<%= buttonsdata.default.[1].id %>") 

給我什麼,我所期望的,但是如果我嘗試和控制檯日誌buttons.length,它被用來在循環的例子我所看到的,它只是出現空白。 另外我怎樣才能控制檯登錄對象的全部內容來查看它的結構? 第三 - 這個對象,通過這種方式,我可以告訴可以通過ejs,但不是核心JavaScript,我只能使用ejs <%>標籤訪問它。這是一個正確的理解?

回答

1
  1. 您的JSON只包含的對象,它沒有任何的陣列中,所以您將無法使用buttonsdata.length

  2. 顯示整個對象 - 從內部顯示對象你的控制器,而不是你的模板。看看this answer看到這個對象如何

  3. 可通過EJS - 是的,這是一個正確的認識 - 我認爲通過核心你的意思是在瀏覽器中執行的JavaScript的JavaScript。整個ejs模板在後端進行處理。

+1

感謝。 1.將重構JSON 2.它只輸出[Object Object],這是否提供了我出錯的地方的線索?這就是對的。 –

+0

你是明星。這解決了它,只需要使它成爲一個數組。現在變得更有意義。親切的問候 –

+0

酷。我很高興我能幫上忙! –

1

使用普通的JavaScript,你可以使用Object.keys

var obj = { 
    "default": { 
     "1": { 
      "id": "alertmessages", 
      "title": "Your Messages", 
      "subtitle": "Tasks waiting for your attention", 
      "image": "alert.png", 
     }, 
     "2": { 
      "id": "uploadr", 
      "title": "Upload", 
      "subtitle": "Upload", 
      "image": "baskets.png", 
     } 
    } 
}; 
Object.keys(obj.default).forEach(function(key) { 
    console.log(obj.default[key].id); 
}); 

現在,根據你的代碼,在視圖應該像這樣工作:

<ul> 
<% Object.keys(buttonsdata.default).forEach(function(key) { %> 
    <li><%= buttonsdata.default[key].id %></li> 
<% } %> 
</ul> 
+1

這是正確的做法。有些人可能會推薦'for ... in',但'for ... in'是hella危險的。 –