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

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

Например:

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

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


person Jason    schedule 11.05.2020    source источник


Ответы (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, но провести некоторое тестирование и в зависимости от того, как настроены ваши коллекции это могло быть относительно легко.

person Luke Storry    schedule 24.08.2020