Когда объект данных ссылается на другой объект данных, как использовать в 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, но провести некоторое тестирование и в зависимости от того, как ваши коллекции настроены это могло быть относительно легко.