Рекурсивная итерация по объекту в шаблоне Jade? - PullRequest
12 голосов
/ 14 ноября 2011

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

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

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

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

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

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

Ответы [ 3 ]

13 голосов
/ 10 февраля 2012

Прошло много времени с тех пор, как ты спросил, но, думаю, 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).

6 голосов
/ 15 марта 2015

В современной версии 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 )

5 голосов
/ 27 августа 2012

Рекурсия теперь поддерживается.Я успешно использовал функцию с незначительной настройкой;вам нужно использовать ключевое слово mixin при вызове функции.

mixin parseObject(obj)
  div
    each val, key in obj
      if typeof val === 'string'
        span #{val}
      else if typeof val === 'object'
        mixin parseObject(val)
...