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

如何在Eleventy的JavaScript文件中访问集合对象与JSON数据

问题:Eleventy前端JS文件如何访问集合与_data目录下的JSON数据?

问题描述

  • 我是Eleventy新手,正在自学。现有带下拉菜单的gallery.html页面,配套JS文件会根据下拉选项动态添加HTML内容。
  • 尝试在src/js目录的JS文件中访问.eleventy.js里定义的portraits集合,直接写collections.portraits时,控制台报错:

    ReferenceError: collections is not defined

  • 尝试访问src/_data/photos.json中的数据,写photos.aKey时,控制台报错:

    ReferenceError: photos is not defined

解决方法

Eleventy的collections和_data目录下的数据都是构建时的服务端数据,无法直接在前端JS文件中访问。需要先把数据注入到HTML页面的全局作用域,再让前端JS读取。

1. 访问src/_data/photos.json数据

在gallery.html模板中,将photos数据挂载到全局window对象,且这段代码要放在自定义JS文件引入之前:

<script>
  // 注入_data中的photos数据到全局
  window.photos = {{ photos | dump | safe }};
</script>
<!-- 引入你的自定义JS文件 -->
<script src="/js/你的脚本文件名.js"></script>

之后在JS文件中,即可通过photos.aKey(或window.photos.aKey)访问对应数据。

2. 访问portraits集合数据

同样在gallery.html模板中注入集合数据:

<script>
  // 注入portraits集合数据到全局
  window.portraitsCollection = {{ collections.portraits | dump | safe }};
</script>

在JS文件中,通过window.portraitsCollection就能访问集合内容。

关键说明

  • dump过滤器用于将Eleventy的数据转换为JSON字符串,safe过滤器避免HTML转义数据内容,确保注入的是合法的JS对象。
  • 必须保证数据注入的script标签在自定义JS之前执行,否则JS运行时会找不到对应数据。

内容的提问来源于stack exchange,提问作者Gaëlle Bono

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:20:56