私はあなたが達成しようとしていることを正確にはわかりません。 items
という1つの配列をループし、navigationItems
という新しい配列にコピーしたいようです。おそらくitems
には、マクロに渡すよりも多くのキーが含まれていますか?
私はそうでなければ、単にそのようnavigationItems
にitems
をコピーすることができ、その仮定を作るつもりです:
{% set navigationItems = items %}
この例では動作します:
{% 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
値はdescription
キーが含まれていますこれは配列navigationItems
に渡されません。それが私だったら、あなたのキーがname
とurl
の両方の配列で同じであるので、navigation
マクロに直接website
を渡すだけです。
ここのパターンは、JavascriptまたはRubyのmap
メソッドとほとんど同じです。