You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在11ty中用EJS调用collections遇‘Cannot read properties of undefined’错误如何解决?

问题解决:11ty中EJS遍历collections的正确写法

你出错的核心原因是误用了for...in循环:

  • JavaScript的for...in遍历的是对象的可枚举属性名,对于collections.post这个数组来说,a_post拿到的是数组的索引(比如0、1这种字符串),而不是数组里的post对象本身。所以访问a_post.data.title自然会报错——索引字符串没有data属性。
  • 而Nunjucks的for post in collections.post语法是专门针对数组/对象的遍历,数组场景下直接返回元素,所以能正常运行。

正确的EJS写法

方法1:使用for...of循环(推荐,和Nunjucks逻辑最接近)

---
layout: layouts/base.ejs
title: a list of post
---
<ul>
  <% const posts = collections.post;
     for (let a_post of posts) { %>
    <li><%- a_post.data.title %></li>
  <% } %>
</ul>

方法2:使用数组forEach方法

---
layout: layouts/base.ejs
title: a list of post
---
<ul>
  <% collections.post.forEach(a_post => { %>
    <li><%- a_post.data.title %></li>
  <% }) %>
</ul>

方法3:传统索引式for循环

---
layout: layouts/base.ejs
title: a list of post
---
<ul>
  <% const posts = collections.post;
     for (let i = 0; i < posts.length; i++) { 
       const a_post = posts[i]; %>
    <li><%- a_post.data.title %></li>
  <% } %>
</ul>

内容的提问来源于stack exchange,提问作者Kingsley Eghianruwa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:10:24