将 Jade Mixins 作为参数传递给其他 Jade Mixins
Passing Jade Mixins as Parameters to other Jade Mixins
我正在使用 atomic design 的原则为客户设计网站。我正在创造一种可能包含不同分子的有机体。我的问题是,这个有机体可以将分子 mixin 作为参数吗?像这样的东西,例如:
分子1
mixin molecule-1(args)
.someDiv(class= args.class)
p= args.text
分子2
mixin molecule-2(args)
.someOtherDiv(class= args.class)
p= args.text
a(href='#')= args.linkText
生物体
mixin organism(slides)
include path/to/molecule-1.jade
include path/to/molecule-2.jade
.container
each slide in slides
slide
页数
include path/to/organism.jade
include path/to/molecule-1.jade
include path/to/organism.jade
+organism({slides:[+molecule-1({class: 'someclass', text: 'sometext'}),
+molecule-2({class: 'someotherclass', text: 'sometext',
linkText: 'someLink'})]})
这会产生
<div class='container'>
<div class='someDiv someclass'>
<p>sometext</p>
</div>
<div class='someOtherDiv someotherclass'>
<p>sometext</p>
<a href='#'>someLink</a>
</div>
</div>
或者我是否必须像这样将每个单独的属性传递给有机体:
生物体
mixin organism(slides)
include path/to/molecule-1.jade
include path/to/molecule-2.jade
.container
each slide in slides
if slide.type === 'molecule1'
+molecule-1({class: slide.class, text: slide.text})
else if slide.type === 'molecule2'
+molecule-2({class: slide.class, text: slide.text, linkText: slide.linkText})
也就是说,有没有比后一种处理方式更优雅的解决问题的方法呢?
这是我要做的工作。我认为您确实需要 organism
中的 if
语句来确定要渲染的分子,并且每个对象中的 type
属性,但是您可以直接将对象传递给适当的分子混合。
您还可以使用 rest arguments syntax(...幻灯片)传入未指定数量的参数。
include path/to/molecule-1.jade
include path/to/molecule-2.jade
mixin organism(...slides)
.container
each slide in slides
if slide.type == "m1"
+molecule-1(slide)
else if slide.type == "m2"
+molecule-2(slide)
+organism({type:"m1", class:"class1", text:"some text"}, {type:"m2", class:"class2", text:"some more text", linkText:"Link"})
如果需要,您可以通过将分子对象拆分为变量来使 organism
调用更具可读性。
- var moleculeObj1 = {type:"m1", class:"class1", text:"some text"};
- var moleculeObj2 = {type:"m2", class:"class2", text:"some more text", linkText:"Link"};
+organism(moleculeObj1, moleculeObj2)
我正在使用 atomic design 的原则为客户设计网站。我正在创造一种可能包含不同分子的有机体。我的问题是,这个有机体可以将分子 mixin 作为参数吗?像这样的东西,例如:
分子1
mixin molecule-1(args)
.someDiv(class= args.class)
p= args.text
分子2
mixin molecule-2(args)
.someOtherDiv(class= args.class)
p= args.text
a(href='#')= args.linkText
生物体
mixin organism(slides)
include path/to/molecule-1.jade
include path/to/molecule-2.jade
.container
each slide in slides
slide
页数
include path/to/organism.jade
include path/to/molecule-1.jade
include path/to/organism.jade
+organism({slides:[+molecule-1({class: 'someclass', text: 'sometext'}),
+molecule-2({class: 'someotherclass', text: 'sometext',
linkText: 'someLink'})]})
这会产生
<div class='container'>
<div class='someDiv someclass'>
<p>sometext</p>
</div>
<div class='someOtherDiv someotherclass'>
<p>sometext</p>
<a href='#'>someLink</a>
</div>
</div>
或者我是否必须像这样将每个单独的属性传递给有机体:
生物体
mixin organism(slides)
include path/to/molecule-1.jade
include path/to/molecule-2.jade
.container
each slide in slides
if slide.type === 'molecule1'
+molecule-1({class: slide.class, text: slide.text})
else if slide.type === 'molecule2'
+molecule-2({class: slide.class, text: slide.text, linkText: slide.linkText})
也就是说,有没有比后一种处理方式更优雅的解决问题的方法呢?
这是我要做的工作。我认为您确实需要 organism
中的 if
语句来确定要渲染的分子,并且每个对象中的 type
属性,但是您可以直接将对象传递给适当的分子混合。
您还可以使用 rest arguments syntax(...幻灯片)传入未指定数量的参数。
include path/to/molecule-1.jade
include path/to/molecule-2.jade
mixin organism(...slides)
.container
each slide in slides
if slide.type == "m1"
+molecule-1(slide)
else if slide.type == "m2"
+molecule-2(slide)
+organism({type:"m1", class:"class1", text:"some text"}, {type:"m2", class:"class2", text:"some more text", linkText:"Link"})
如果需要,您可以通过将分子对象拆分为变量来使 organism
调用更具可读性。
- var moleculeObj1 = {type:"m1", class:"class1", text:"some text"};
- var moleculeObj2 = {type:"m2", class:"class2", text:"some more text", linkText:"Link"};
+organism(moleculeObj1, moleculeObj2)