液体模板:在for循环中分配变量时出现奇怪的行为

时间:2015-12-27 20:05:41

标签: template-engine liquid

我正在学习Liquid(使用grunt-liquid)。我用一个简单的for循环遇到了一些非常奇怪的行为。也许你可以告诉我我做错了什么。

以下是我的代码的第1版,它按预期工作:

{% assign isThree = 'initial value' %}

{% for i in (1..9) %}

    {% if i == 3 %}
        {% assign isThree = true %}
    {% else %}
        {% assign isThree = false %}
    {% endif %}

    <p>{{ i }}: {{ isThree }}</p>

{% endfor %}

基本上,它循环遍历数字1到9,并显示每一个,以及指示数字是否为3的布尔值。这会产生预期的输出:

1: false
2: false
3: true
4: false
5: false
6: false
7: false
8: false
9: false

这是我的代码的第2版,它展示了有问题的奇怪行为。它与版本1完全相同,只是它在分配someOtherVar之前现在分配了一个名为isThree的变量:

{% assign isThree = 'initial value' %}

{% for i in (1..9) %}

    {% assign someOtherVar = 'foo' %}

    {% if i == 3 %}
        {% assign isThree = true %}
    {% else %}
        {% assign isThree = false %}
    {% endif %}

    <p>{{ i }}: {{ isThree }}</p>

{% endfor %}

此更改根本不应影响输出,但确实如此!实际上,它使得分配给isThree的值在循环的 next 迭代之前不可用:

1: initial value
2: false
3: false
4: true
5: false
6: false
7: false
8: false
9: false

如果我将someOtherVar作业移到 {% if %}块之下,那么一切正常。

这到底是怎么回事?

0 个答案:

没有答案