在ejs partial

时间:2016-05-17 15:08:14

标签: javascript json node.js ejs

我试图在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;来访问它。标签。这是正确的理解吗?

2 个答案:

答案 0 :(得分:3)

您可以使用Object.keys()

&#13;
&#13;
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;
&#13;
&#13;

现在,根据您的代码,视图应该像这样工作:

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

答案 1 :(得分:1)

  1. 您的json只包含对象,其中没有任何数组,因此您将无法使用buttonsdata.length

  2. 显示整个对象 - 在控制器中显示对象,而不是模板。请查看this answer以查看

  3. 的方式
  4. 这个对象可以通过ejs 获得 - 是的,这是正确的理解 - 我假设通过核心javascript 你的意思是在浏览器中执行的javascript。整个ejs模板在后端处理。