流星空格键:#each 内的 #if 会产生意想不到的结果

Posted

技术标签:

【中文标题】流星空格键:#each 内的 #if 会产生意想不到的结果【英文标题】:Meteor Spacebars: #if inside #each produces unexpected results流星空格键:#each 内的 #if 会产生意想不到的结果 【发布时间】:2014-12-19 08:43:48 【问题描述】:

#each 中的 #if 的这个简单示例产生了一个意想不到的(对我来说)结果:

html

<head>
    <title>test</title>
</head>

<body>
    > test yes=true
</body>

template name="test">
    #if yes
        <span>yes</span>
    else
        <span>no</span>
    /if
    <ul>
        #each testItems
            #if yes
                <li>yes</li>
            else
                <li>no</li>
            /if
        /each
    </ul>
</template>

JS:

Template.test.helpers(
    testItems: [1,2,3]
);

输出:

是的

没有 没有 没有

我期待一个包含 3 x 是的列表...

这段代码有什么问题?

【问题讨论】:

【参考方案1】:

每个帮助程序中的数据上下文是 testItems 数组,但您正在尝试访问父上下文的变量(测试模板的数据上下文)。所以自然是未定义,从而导致 if 语句评估为假。如果您访问父上下文,您应该会得到预期的结果。

<head>
    <title>test</title>
</head>

<body>
    > test yes=true
</body>

template name="test">
    #if yes
        <span>yes</span>
    else
        <span>no</span>
    /if
    <ul>
        #each testItems
            #if ../yes
                <li>yes</li>
            else
                <li>no</li>
            /if
        /each
    </ul>
</template>

【讨论】:

以上是关于流星空格键:#each 内的 #if 会产生意想不到的结果的主要内容,如果未能解决你的问题,请参考以下文章

如何在流星中获取嵌套#each的@index

在 while 循环中使用 -- 运算符会产生意想不到的结果

流星模板,检查值是不是等于字符串

流星在模板空格键中显示数组的第一个元素

使用“%”进行操作会产生意想不到的结果[重复]

流星订阅不更新集合的排序顺序