我要传递可变数量的参数。
我可以传递像
这样的参数+func(key="a",value="b",c="a")
我尝试但失败了。
----更认真地解释我的问题----
事实上,我需要mixin来构建一个大模板。例如:
mixin template(a,b,c,d,e,f)
div#1 !{a}
div#2 !{b}
div#3 !{c}
if d
div#4 !{d}
if e
div#5 !{e}
div#6 !{f}
+template("a","b","c","","e","f")
如果d不存在,我仍然需要输入一个空字符串,但我不想。
所以我用另一种形式写作。
mixin template($)
div#1 !{$.a}
div#2 !{$.b}
....
+template({a="a",b="b",c="c",e="e",f="f"})
然后我可以忽略空d。我可以省略" $"还有吗?
答案 0 :(得分:0)
如果你想渲染像
这样的东西<a key="a" value="b" c="a"></a>
来自
之类的输入+func(key="a",value="b",c="a")
使用
mixin func()
a&attributes(attributes)
+func(key="a",value="b",c="a")
使用动态代码
mixin func()
#{attributes.tag}&attributes(attributes.attr)
+func(tag="img", attr={key:"a",value:"b",c:"a"})
呈现
<img key="a" value="b" c="a"></img>
使用动态代码和内容
mixin func()
#{attributes.tag}&attributes(attributes.attr)=attributes.content
+func(tag="img", attr={key:"a",value:"b",c:"a"}, content="something")
呈现
<img key="a" value="b" c="a">something</img>
回复你的评论:在Javascript中,我可以像func一样传递参数(a =“b”,c =“d”),然后使用像func(){console.log(a) }。但在玉器中,我认为另一种方法是传递一个对象并使用如func($){console.log($。a)}
是的,在JS中你可以使用func($) { console.log($.a) }
(但你只能访问a的现有属性。在编写代码之前你必须知道属性)。 JS只是传递未知数量参数概念的一个例子吗?然后上面的mixins就会按照你的要求做(或者更好,我明白你的要求)
或者您想在Jade-Template中创建JS函数并在Jade对象中定义JS函数的参数?然后使用类似的东西:
mixin func()
- var attr=attributes.attr
- var k=[],v=[]
- for (var i = 0; i < Object.keys(attr).length; ++i) {
- k.push(Object.keys(attr)[i])
- v.push(attr[Object.keys(attr)[i]])
- }
script
| function #{attributes.functionname}(!{k}) {
| // Whatever may be within the function
| !{attributes.content}
| }
|
| #{attributes.functionname}(!{v});
+func(functionname="myJSFunc", attr={key:"a",value:"b",c:"a",string:"'Paul'"},
content="var q=1,r=2;\n return q+r;")
将呈现
<script>
function myJSFunc(key,value,c,string) {
// Whatever may be within the function
var q=1,r=2;
return q+r;
}
myJSFunc(a,b,a,'Paul');
</script>