2011-11-13 17 views
12

私はいくつかの文字列、いくつかの文字列の配列、文字列の配列を含むオブジェクトなど、混在したプロパティのオブジェクトを持っています。Jadeテンプレート内のオブジェクトに対する反復反復?

オブジェクトがdivを作成し、配列がdivを作成し、文字列プロパティがテキストを含むスパンを作成するように、すべてのプロパティを繰り返し処理したいと思います。

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

上記の目的は、としてレンダリングされます:

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

しかし、通常ははるかに複雑な構造。これを達成するためにどうすればいいですか?

答えて

13

あなたが質問してからしばらくしていますが、mixinはあなたの友人だと思います。私はそれを試していませんが、ミックスインのサポート再帰場合、これは動作するはずです:

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

を呼び出す

mixin parseObject(obj) div each val in obj if typeof val === 'string' span= val else if typeof val === 'object' +parseObject(val) 

のように見えます。私はこれを試しましたが、mixinは再帰を好きではないようです:( –

+0

@Robert Martin:それは今です:) –

+0

オリジナルのポスターとして、 'mixin'(thank ** 0x80 **)と適切な ' - '接頭辞。 –

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) 
5

その後、あなたの.jadeファイルのボディに、ここでサードパーティ

+parseObject(rootObject)

関連する問題