2017-08-15 4 views
1

Pugを使用してスタイルガイドを作成し、mixinを使って再利用可能な要素のヘッダーと説明を生成します。Pugの再帰的mixin

+sgitem('Foo') 
    include partial with sgitem 
+sgitem('Baz') 
    div Example here 

、ネストされた項目はわずか1ブロックではなく名前を返す必要があります:私はこれを書いている場合ことを意味し

mixin sgitem(name) 
    if !isnested 
     - isnested = true 
     h3=name 
     block 
    else 
     block 
    - isnested = false 

:簡略化した例はこれです。さて、動作するが、第二ま​​たは第三のネストされたsgitemがありますされていない場合:私はこれが好きだろうが、

<h3>Foo</h3> 
<div>Nested example</div> 
<h3>Nested title</h3> 
<div>Nested example</div> 
<h3>Baz</h3> 
<div>Example here</div> 

を::これを生成します

+sgitem('Foo') 
    include partial with sgitem 
    include partial with sgitem 
+sgitem('Baz') 
    div Example here 

<h3>Foo</h3> 
<div>Nested example</div> 
<div>Nested example</div> 
<h3>Baz</h3> 
<div>Example here</div> 

をそれおそらくPug自体ではなく、変数を設定するなどの問題です。だから、ミックスインはそれがネストされているかどうかを正しく知ることができますか?

答えて

0

あなたがやっているような気がするのは、あまりにも複雑です。あなたは次のようなものを作るだけではありませんか?

mixin sgitem(title, description) 
    if title 
    h3=title 
    if description 
    div=description 

その後、ミックスインを呼び出す:私たちは、その内容からミックスインを分割し、必要なときにそのコンテンツのそれぞれを含むことになった

<h3>Foo</h3> 
<div>Nested example</div> 
<div>Nested example</div> 
<h3>Baz</h3> 
<div>Example here</div> 
+0

おかげで、私は含まれて巣彼らにできるようにする必要があります。スタイルガイドアイテムはアトミックデザインに基づいているため、最小のアイテム(名前と説明付き)を大きなアイテムに含めることができます。しかし、その場合は、ブロックだけを含める必要があります。 – Magnifix

0

+sgitem('Foo', 'Nested example') 
+sgitem('', 'Nested example') 
+sgitem('Baz', 'Example here') 

は、その中にレンダリングされます。

Partial file A: 
li List item example here 

Page with atoms: 
+sgmixin('A list item', 'Bla bla') 
    include atoms/A 


Page with molecules: 
+sgmixin('A list', 'Bla bla') 
    ul 
     include atoms/A