Рекурсивная итерация по объекту в шаблоне Jade?
У меня есть объект смешанных свойств типа - некоторые строки, некоторые массивы строк, некоторые объекты, содержащие массивы строк, которые могут потенциально проникать на много уровней.
Я хотел бы перебрать все свойства, чтобы объект создавал div, массив создает div, а свойство string создает диапазон, содержащий текст.
{ "string" : "some text", "object" : { "array" : [ "text" ] } }
Вышеуказанный объект будет отображаться как:
<span>some text</span>
<div>
<div>
<span>text</span>
</div>
</div>
Но обычно гораздо более сложные структуры. Как мне пойти на это, это Джейд?
Ответы
Ответ 1
Прошло некоторое время с тех пор, как вы спросили, но mixin
- ваш друг, я думаю. Я не пробовал, но если mixins поддерживает рекурсию, это должно работать:
mixin parseObject(obj)
div
- each val, key in obj
- if (typeof val === 'string')
span #{val}
- else if (typeof val === 'object')
mixin parseObject(val)
Затем в теле вашего .jade файла вызовите mixin parseObject(rootObject)
.
Ответ 2
Рекурсия, похоже, теперь подтверждается. Я успешно использовал эту функцию с небольшим изменением; вам нужно использовать ключевое слово mixin при вызове функции.
mixin parseObject(obj)
div
each val, key in obj
if typeof val === 'string'
span #{val}
else if typeof val === 'object'
mixin parseObject(val)
Ответ 3
В современной версии Jade это выглядит как
mixin parseObject( obj )
div
each val in obj
if typeof val === 'string'
span= val
else if typeof val === 'object'
+parseObject( val )
Затем в теле вашего файла .jade вызовите
+parseObject( rootObject )