0

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

例如:

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

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

4

1 回答 1

0

你可以在你的文件中创建一个自定义的 110 集合.eleventy.js,它接受链接的 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 集合,但根据您的集合的设置方式进行一些测试这可能相对容易。

于 2020-08-24T13:27:47.627 回答