我试图在EJS部分内的下面的JSON文件中循环“default”中的每个条目。
{
"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 partial,我试图遍历默认包含的所有对象(这个数字可能会有所不同)。我想在没有Jquery的情况下这样做。但无法获得我在其他线程上找到的任何建议。
console.log("<%= buttonsdata.default.[1].id %>")
给了我我期望的结果,但是如果我尝试并控制日志 buttons.length ,这在我看过的循环示例中使用,它只是空白。 另外我如何控制日志对象的整个内容以查看其结构? 第三 - 这个对象,我可以通过这种方式通过ejs获得,但不是核心javascript,我只能使用ejs&lt; %%&gt;来访问它。标签。这是正确的理解吗?
答案 0 :(得分:3)
您可以使用Object.keys():
const buttonsdata = {
"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(buttonsdata.default).forEach(function (key) {
console.log(buttonsdata.default[key].id);
});
&#13;
现在,根据您的代码,视图应该像这样工作:
<ul>
<% Object.keys(buttonsdata.default).forEach(function(key) { %>
<li><%= buttonsdata.default[key].id %></li>
<% } %>
</ul>
答案 1 :(得分:1)
您的json只包含对象,其中没有任何数组,因此您将无法使用buttonsdata.length
显示整个对象 - 在控制器中显示对象,而不是模板。请查看this answer以查看
这个对象可以通过ejs 获得 - 是的,这是正确的理解 - 我假设通过核心javascript 你的意思是在浏览器中执行的javascript。整个ejs模板在后端处理。