在Jade模板中对对象进行递归迭代?

Tom*_*Tom 12 recursion template-engine pug

我有一个混合类型属性的对象 - 一些字符串,一些字符串数组,一些包含字符串数组的对象 - 可能会深入多层次.

我想遍历所有属性,以便对象创建div,数组创建div,字符串属性创建包含文本的span.

{ "string" : "some text", "object" : { "array" : [ "text" ] } }
Run Code Online (Sandbox Code Playgroud)

上面的对象将呈现为:

<span>some text</span>
<div>
  <div>
    <span>text</span>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

但通常结构要复杂得多.我应该如何实现这一目标呢?

mna*_*mna 13

你提问已经有一段时间了,但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)
Run Code Online (Sandbox Code Playgroud)

然后在.jade文件的正文中,调用mixin parseObject(rootObject).


Sun*_*ise 6

在Jade的现代版本中看起来像

mixin parseObject( obj )
  div
    each val in obj
      if typeof val === 'string'
        span= val
      else if typeof val === 'object'
        +parseObject( val )
Run Code Online (Sandbox Code Playgroud)

然后在.jade文件的正文中,调用

+parseObject( rootObject )


Thi*_*man 5

递归似乎现在被支持了.我已经成功地使用了这个功能,并进行了微小的调整; 调用函数时需要使用mixin关键字.

mixin parseObject(obj)
  div
    each val, key in obj
      if typeof val === 'string'
        span #{val}
      else if typeof val === 'object'
        mixin parseObject(val)
Run Code Online (Sandbox Code Playgroud)