我如何在Jade中创build一个可重用的标记
我正在努力完成的。
我想要做的事情其实很简单,Jade模板引擎应该能够帮助我很多,但是我遇到了一些麻烦。
我build立了一个网站,使用了很多像这个jsFiddle中的半透明元素: http : //jsfiddle.net/Chevex/UfKnM/
为了使容器背景为半透明,但保持文本不透明,这涉及3个元素:
- 容器DIV的
position: relative
- 一个
position: absolute
,背景颜色,高度/宽度设置为100%,并将其不透明度设置为所需级别的子DIV。 - 另一个孩子DIV的内容没有特殊定位。
这很简单,我在CodeTunnel.com上相当有效地使用它。
我想如何简化它。
我在node.js中重写了CodeTunnel.com,而Jade模板引擎似乎可以大大简化这段重复使用的标记。 翡翠mixins看起来很有希望,所以这就是我所做的:
-
我定义了一个mixin,所以我可以在需要的时候使用它。
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>
到目前为止,一切都很好! 只有一个问题。 我想在layout.jade模板中使用这个mixin,我希望子模板能够使用块inheritance。 我的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
一切看起来都是按顺序的,但是玉石parsing器却失败了:
我认为这与block
关键字冲突有关。 在mixin block
内部是一个包含传递给mixin的block
的隐式参数,但是当扩展一个jade模板块时,是一个关键字,用于标识要在父模板的等效块中replace的标记块。
如果我用任何其他标记replace我传入mixin的block bodyContent
,则一切正常。 只有当我试图通过一个块定义,它会变得不高兴。
有任何想法吗?
我怀疑,因为mixin定义了自己的函数 , block bodyContent
index.jade
被定义在index.jade
不可访问的不同范围内。
你可以尝试的是将mixin的使用移到inheritance视图,因为mixin是“悬挂”的 :
layout.jade
:
doctype 5 mixin container .container(id=attributes.id) .translucentFrame .contentFrame block html head title Container mixin text body block bodyContent
index.jade
:
extends layout block bodyContent +container#myContainer h1 Some test content