Когда объект данных ссылается на другой объект данных, как использовать в 11ty (или nunjucks)?

У меня есть объекты данных, которые ссылаются на другие объекты данных.

Например:

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

В javascript я бы сделал что-то вроде ES6 find(), но есть ли какой-нибудь способ сделать это умно / динамично? Конкретно в шаблонах, если я хочуkey1из объекта B, как мне сделать эту ссылку в нунджуках? Нужно ли мне указывать в моем шаблоне два источника данных? Как выглядит тег шаблона nunjucks?

1 ответ

Вы можете создать индивидуальную одиннадцатую коллекцию в своем.eleventy.js файл, который принимает связанный идентификатор и использует 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, но провести некоторое тестирование и в зависимости от того, как ваши коллекции настроены это могло быть относительно легко.

Другие вопросы по тегам