2016-03-22 8 views
1

Wie nunjucks unterstützt nun set as a block ich mit so etwas wie dies tun wollte:nunjucks Set-Objekt erstellen

{% set navigationItems %} 
    {% for item in items %} 
    { name: item.name, url: item.url }{% if not loop.last %},{% endif %} 
    {% endif %} 
{% endset %} 

Dann rufen Sie diese Variable als Eingabeobjekt auf einem anderen Makro, etwa so:

{{ navigation(items=[navigationItems]) }} 

wird jedoch als String und nicht als Array-Literal ausgewertet. Irgendeine Idee wie, oder wenn das möglich ist?

Danke.

Antwort

1

Ich weiß nicht genau, was Sie erreichen wollen. Es sieht so aus, als ob Sie ein Array namens items überschleifen und in ein neues Array namens navigationItems kopieren möchten. Vielleicht enthält items mehr Schlüssel als Sie an das Makro übergeben möchten?

Ich werde diese Annahme machen, sonst hat man einfach items in navigationItems wie so kopieren könnte:

{% set navigationItems = items %}

Dieses Beispiel funktioniert:

{% 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 Werte einen description Schlüssel enthalten welches nicht an das Array weitergegeben wird. Wenn ich es wäre, würde ich einfach website direkt an das navigation Makro weitergeben, da Ihre Schlüssel: name und url in beiden Arrays identisch sind.

Das Muster hier ist fast wie eine map Methode in Javascript oder Ruby.

Verwandte Themen