Javascript 使用NUNJUCK或其他方法为嵌套变量创建模板解决方案
我刚刚开始使用gulp&Nunjuck进行模板制作(本例中为电子邮件) 我想解决调用module/partial并在每次处理时为属性分配不同值的问题 它最初看起来像for循环的作业,但不一定会在模板中按顺序调用该模块 在模块中,有分配给变量的属性。 我希望根据模块所用于的部分,以不同的方式解析这些变量 一个非常基本的例子是-在索引文件中,我有:Javascript 使用NUNJUCK或其他方法为嵌套变量创建模板解决方案,javascript,npm,gulp,template-engine,nunjucks,Javascript,Npm,Gulp,Template Engine,Nunjucks,我刚刚开始使用gulp&Nunjuck进行模板制作(本例中为电子邮件) 我想解决调用module/partial并在每次处理时为属性分配不同值的问题 它最初看起来像for循环的作业,但不一定会在模板中按顺序调用该模块 在模块中,有分配给变量的属性。 我希望根据模块所用于的部分,以不同的方式解析这些变量 一个非常基本的例子是-在索引文件中,我有: {% block content %} <!-- logo start --> {% include genericMod %} &
{% block content %}
<!-- logo start -->
{% include genericMod %}
<!-- logo end -->
<!-- some other section start -->
{% include someOtherMod %}
<!-- some other section end -->
<!-- hero start -->
{% include genericMod %}
<!-- hero end -->
{% endblock %}
然后能够在每次调用模块时以某种方式将该密钥分配给该模块:
<!-- logo start —>
{% include genericMod "modKey": "logo" %}
<!-- logo end -->
显然,这只是一个假设性的解决方案,但是否有一种方法可以实现类似的效果 结果证明解决方案非常简单。在尝试使用“set”时,我将上下文变量的值分配给字符串而不是变量名 为了记录在案,这是有效的
{% set data = logo %}
{% include oneIncludeFile %}
{% set data = hero %}
{% include otherIncludeFile %}
其中包含文件将引用,例如{data.alt}或{{data.href}
尽管宏可能是实现这一点的更好方法:
{% macro foo(data) %}
<a href="{{ data.href }}"><img src="{{ data.src }}" alt="{{ data.alt }}" /></a>
{% endmacro %}
{%macro-foo(数据)%}
{%endmacro%}
然后像{{foo(logo)}}
和{{foo(hero)}}
那样调用它来传递不同的数据集
完整的解释可以在这里找到:
<tr>
<td class="full-width-image" align="{{logo.align}}" ><img src="{{logo.src}}" alt="{{logo.alt}}"/></td>
</tr>
<!-- hero start -->
{% include genericMod "modKey": "hero" %}
<!-- hero end -->
<tr>
<td class="full-width-image" align="{{hero.align}}" ><img src="{{hero.src}}" alt="{{hero.alt}}"/></td>
</tr>
"logo": {
"alt": "some logo alt text",
"href": "http://www.someurl.com",
"align": "left"
},
"hero": {
"alt": "some hero alt text",
"href": "http://www.someotherurl.com",
"align": "centre"
}
{% set data = logo %}
{% include oneIncludeFile %}
{% set data = hero %}
{% include otherIncludeFile %}
{% macro foo(data) %}
<a href="{{ data.href }}"><img src="{{ data.src }}" alt="{{ data.alt }}" /></a>
{% endmacro %}