nunjucks设置了创建对象

时间:2016-03-22 14:24:28

标签: javascript nunjucks

由于nunjucks现在支持使用set as a block我想做这样的事情:

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

然后将此变量称为另一个宏上的输入对象,如下所示:

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

但是,navigationItems被评估为字符串,而不是数组文字。知道如何,或者是否可能?

感谢。

1 个答案:

答案 0 :(得分:2)

我不确定你要完成什么。看起来你想要遍历一个名为127.0.0.1 www.wordpress.dev 的数组并将其复制到一个名为items的新数组中。也许navigationItems包含的密钥多于您想要传递给宏的密钥?

我会做出这样的假设,否则您只需将items复制到items就可以了:

navigationItems

此示例有效:

{% 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直接传递到website宏,因为您的密钥:navigationname在两个数组中都是相同的。

这里的模式几乎就像Javascript或Ruby中的url方法。