Пользовательский тег 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 в операторе return, и это не меняет результат. Я использовал (более сложный) пользовательский тег раньше, поэтому я знаю, что они могут работать.
Если вам интересно, я действительно хочу использовать тег, чтобы чередовать цвета фона строки сетки!
1 ответ
BasicTag
можно использовать только так:
#TagName(variable)
и возвращает значение.
Если вы хотите условно визуализировать следующий блок следующим образом:
#TagName(variable) { show if true }
тогда вам нужно продлить Tag
и вставьте свой код показа / скрытия в shouldRender(tagTemplate:arguments:value:)
функция.
В качестве отправной точки, посмотрите на If
тег, но вместо проверки на истинные значения, проверьте четные значения.