Подтвердить что ты не робот

Рекурсивная итерация по объекту в шаблоне Jade?

У меня есть объект смешанных свойств типа - некоторые строки, некоторые массивы строк, некоторые объекты, содержащие массивы строк, которые могут потенциально проникать на много уровней.

Я хотел бы перебрать все свойства, чтобы объект создавал div, массив создает div, а свойство string создает диапазон, содержащий текст.

{ "string" : "some text", "object" : { "array" : [ "text" ] } }

Вышеуказанный объект будет отображаться как:

<span>some text</span>
<div>
  <div>
    <span>text</span>
  </div>
</div>

Но обычно гораздо более сложные структуры. Как мне пойти на это, это Джейд?

4b9b3361

Ответ 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 )