2016-06-09 185 views
0

我刚开始使用gulp & nunjucks进行模板(本例为电子邮件)。使用nunjucks或其他方法嵌套变量的模板解决方案

我想解决调用模块/ partial的问题,并在每次处理属性时为其分配不同的值。

它最初看起来像一个工作for循环,但模块不一定会在序列中的模板

在模块内有被分配给变量属性调用。 我想解决这些变量的不同取决于模块的使用部分。

一个非常基本的例子是 - 在一个索引文件我有:

{% 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 %} 

而在genericMod itself-:

<tr> 

<td class="full-width-image" align="{{align}}" ><img src="{{src}}" alt="{{alt}}"/></td> 

</tr> 

的这种功能,我想点击即可定义一个“modKey”,例如模块 中的每个变量内的一个变量,例如

{{modKey.align}} 

{{modKey.src}} 

{{modKey.alt}} 

然后能够在该键每次被调用时,不知何故分配到模块:

<!-- logo start —> 

{% include genericMod "modKey": "logo" %} 

<!-- logo end --> 

所以上面的产生:

<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> 

这样通过一个JSON管道时,文件将被渲染为每个相应的数据属性变量:

"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" 
    } 

显然,这只是一个假设性的解决方案,但有实际实现类似的方法吗?

回答

1

事实证明,解决方案非常简单。在尝试使用'set'时,我一直将context var的值赋给一个字符串而不是变量名。

对于这个作品的记录...

{% 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 %} 

,然后调用它像{{ foo(logo) }}{{ foo(hero) }}在不同的数据集来传递。

完整说明可以在这里找到:https://github.com/mozilla/nunjucks/issues/779