javascript - nunjucks 设置创建对象

标签 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 被评估为字符串,而不是数组文字。知道怎么做,或者这是否可能?

谢谢。

最佳答案

我不确定您要完成什么。看起来您想遍历一个名为 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 传递给 navigation 宏,因为你的键是:nameurl 在两个数组中是相同的。

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

关于javascript - nunjucks 设置创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36157048/

相关文章:

macros - Nunjucks:在宏中将对象作为参数传递

javascript - 使用 ACE 编辑器,如何解除绑定(bind)事件?

javascript - Nunjucks:在 for 循环中从数组中选择特定项目

javascript - nunjucks 函数参数未定义

javascript - 使用jquery删除url中的一个参数名称和值

javascript - 获取模板中的小部件选项

node.js - 将对象传递给 Node Express 中的 Nunjucks 模板

javascript - HTML5 以低 kbps 录制音频

javascript - Jquery/Zend 切换元素禁用不起作用

javascript - this.variable 未定义