Jade,我可以将参数传递给mixin,如func(key =" aaa")?

时间:2016-02-23 09:45:52

标签: pug

我要传递可变数量的参数。

我可以传递像

这样的参数
+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。我可以省略" $"还有吗?

1 个答案:

答案 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>