【问题标题】:When a data object references another data object, how to use in 11ty (or nunjucks)?当一个数据对象引用另一个数据对象时,如何在 11ty(或 nunjucks)中使用?
【发布时间】:2020-08-27 06:47:07
【问题描述】:

我有引用其他数据对象的数据对象。

例如:

[
  {
    "_id": "object A id",
    "key1": "value1",
    "linked": [
       {
         "_id": "_object B id"
       }
...

在 javascript 中,我会做类似 ES6 find() 的事情,但有没有 11ty-ish 的方式来智能/动态地做到这一点?特别是在模板中,如果我想要来自对象 B 的key1,我该如何在 nunjucks 中进行引用?我是否需要在模板中指定两个数据源? nunjucks 模板标签是什么样的?

【问题讨论】:

    标签: json nunjucks eleventy


    【解决方案1】:

    你可以在你的.eleventy.js文件中创建一个custom eleventy collection,它接受链接的ID并使用find()附加B对象,然后你可以在nunjucks模板中访问它:

    类似:

    eleventyConfig.addCollection("linkedObjects", function(collectionApi) {
        // get items
        const objectAs = collectionApi.getFilteredByGlob("objectAs/*.md");
        const objectBs = collectionApi.getFilteredByGlob("objectBs/*.md");
        // connect items
        objectAs.forEach(a => a.linkedB = objectBs.find(b => b.id === a.linkedBId)
        // return new collection 
        return objectAs
      });
    
    

    然后在您的模板中,您必须确保您访问的是正确的集合,然后您将能够使用:

    {{ objectA.linkedB.key1 }}
    

    您可能需要创建一个要添加到的新列表,然后将其作为新集合返回,因此它不会就地执行此操作,并编辑 A 集合,但根据您的集合的方式进行一些测试设置起来可能相对容易。

    【讨论】:

      猜你喜欢
      • 2012-11-25
      • 2021-04-05
      • 2012-05-06
      • 1970-01-01
      • 2019-09-30
      • 2015-10-08
      • 2012-11-24
      • 1970-01-01
      • 2013-02-18
      相关资源
      最近更新 更多