私が達成しようとしていること。
私がやろうとしていることは実際には本当に単純で、Jadeテンプレートエンジンはそれでかなり助けてくれるはずですが、私はいくつかの問題にぶつかっています。
このjsFiddleのような多くの半透明の要素を使用するサイトを構築しています:http://jsfiddle.net/Chevex/UfKnM/コンテナ
の背景を半透明にし、テキストを不透明に保つためこれには3つの要素が含まれます。
- コンテナDIV
position: relative
- 子DIVで
position: absolute
、背景色、高さ/幅が100%に設定され、不透明度が目的のレベルに設定されています。 - 特別な配置のないコンテンツの別の子DIV。
それは非常に単純で、 CodeTunnel.comでかなり効果的に使用しています。
どうやって単純化したいのか。
node.jsでCodeTunnel.comを書き直していますが、Jadeテンプレートエンジンを使用すると、何度も再利用するこのマークアップを大幅に簡素化できるようです。ジェイドミックスインは有望に見えるので、これが私がしたことです:
ミックスインを定義したので、必要な場所で使用できます。
mixin container .container(id=attributes.id) // attributes is an implicit argument that contains any attributes passed in. .translucentFrame .contentFrame block // block is an implicit argument that contains all content from the block passed into the mixin.
ミックスインを使用して、コンテンツのブロックを渡します。
+container#myContainer h1 Some test content
生成:
<div id="myContainer" class="container"> <div class="translucentFrame"></div> <div class="contentFrame"> <h1>Some test content</h1> </div> </div>
これまでのところ、すべてがうまく機能しています!問題は1つだけです。このミックスインをlayout.jadeテンプレートで使用し、子テンプレートでブロック継承を使用できるようにします。私のlayout.jadeファイルは次のようになります。
doctype 5
mixin container
.container(id=attributes.id)
.translucentFrame
.contentFrame
block
html
head
title Container mixin text
body
+container#bodyContent
block bodyContent
次に、別のjadeファイル(index.jade)でlayout.jadeを拡張します。
extends layout
block bodyContent
h1 Some test Content
すべてが正常に見えますが、ヒスイのパーサーは失敗します。
block
キーワードの競合と関係があると思います。ミックスインの中には、ミックスblock
インに渡されたブロックを含む暗黙の引数がありますが、jadeテンプレートを拡張する場合、ブロックは、親テンプレートの同等のブロックで置き換えられるマークアップのブロックを識別するキーワードです。
block bodyContent
ミックスインに渡すものを他のマークアップに置き換えると、すべてが正常に機能します。ブロック定義を渡そうとしたときだけ、それは動揺します。
何か案は?