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

时间:2011-11-13 22:47:16

标签: recursion template-engine pug

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

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

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

上述对象将呈现为:

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

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

3 个答案:

答案 0 :(得分: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)

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

答案 1 :(得分:6)

在现代版的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 )

答案 2 :(得分: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)