蒸汽/叶片自定义标签未返回正确的值

时间:2017-10-28 22:23:59

标签: swift vapor leaf

我已经注册了一个自定义标签,如果索引是奇数则返回true,如果是,则返回false:

class OddEvenTag: BasicTag {
    let name = "OddEven"

    func run(arguments: ArgumentList) throws -> Node? {
        guard
            arguments.count == 1,
            let index = arguments[0]?.int
            else { return Node(nil) }
        print(index, index & 1)
        return Node((index & 1) == 1)
    }
}

print语句产生令人满意的良好输出:

0 0
1 1
2 0
3 1
...

但是,当我在叶子文件中的#loop中使用自定义标记时,例如

#OddEven(offset){hello}##else(){bye}

它总是实例化你好。我已经尝试在返回语句中硬编码false,但它不会改变结果。我以前使用过(更复杂的)自定义标签,所以我知道它们可以工作。

如果您想知道,我真的想用标签来交替网格的行背景颜色!

1 个答案:

答案 0 :(得分:1)

BasicTag只能像这样使用:

#TagName(variable)

并返回一个值。

如果您想有条件地渲染以下块,请执行以下操作:

#TagName(variable) { show if true }

然后你需要扩展Tag,并将你的显示/隐藏代码放在shouldRender(tagTemplate:arguments:value:)函数中。

作为起点,请查看If tag,但不要测试真值,而是测试偶数值。