Neyi başarmaya çalıştığınızdan tam olarak emin değilim. items
adında bir dizi üzerinde döngü yapmak ve navigationItems
adlı yeni bir diziye kopyalamak istediğiniz gibi görünüyor. Belki de items
, makroya geçmek istediğinizden daha fazla anahtar içeriyor mu?
Ben aksi takdirde sadece şöyle navigationItems
içine items
kopyası olabilir, bu varsayımı yapacağım:
{% set navigationItems = items %}
Bu örnek çalışır:
{% macro navigation(items) %}
<ul>
{% for item in items %}
<li>{{ item.name }} - {{ item.url }}</li>
{% endfor %}
</ul>
{% endmacro %}
{% set websites = [
{
name: 'Google',
url: 'http://google.com',
description: 'A search engine'
},
{
name: 'GitHub',
url: 'http://github.com',
description: 'A webapp for your git repos'
},
{
name: 'StackOverflow',
url: 'http://stackoverflow.com',
description: 'The answer: 42'
}] %}
{% set navigationItems = [] %}
{% for website in websites %}
{% set navigationItems = (navigationItems.push({name: website.name, url: website.url}), navigationItems) %}
{% endfor %}
{{ navigation(items=navigationItems) }}
websites
değerleri description
anahtarı içerirler navigationItems
dizisine geçirilmez. Eğer ben olsaydım, anahtarını navigation
makrosuna geçiririm çünkü anahtarları: name
ve url
her iki dizide de aynıdır. Buradaki şablon, Javascript veya Ruby'de neredeyse map
yöntemine benzemektedir.