2016-07-05 68 views
3

有没有办法将数据/咏叹调属性的对象传递给元素?在Jade/Pug中应用属性的嵌套对象

我已经试过:

div(data={foo:'bar'}) 

div(data={foo='bar'}) 

div&attributes({aria:{foo:'bar'}}) 

但是,这些输出所需的属性记号。第一个和第三个将基本数据/咏叹调属性中的对象字面量。第二个是语法错误。

,我能找到工作的唯一途径是:

div(data-foo='bar') 

div&attributes({'aria-foo':'bar'}) 

回答

2

通过领先的新线,负-你能写常规的JavaScript在JADE/PUG。这给你一个强大的武器来解决几乎所有的问题。

只需抓住像var attributes = {'foo':'bar', 'bar':'foo'}这样的常规对象,并在每个循环中用你想要的前缀扩展它的键。

这里是一个工作钢笔http://codepen.io/pure180/pen/kXwqdA和 这可能是你的代码:

- var attributes = {'foo':'bar', 'bar':'baz'} 
- var ariaAttributes = {} 
- for (attr in attributes) { 
-  var key = 'aria-' + attr 
-  ariaAttributes[key] = attributes[attr] 
- } 

div&attributes(ariaAttributes) Test 

您也可以使用它作为一个全球性的mixin,这里是笔http://codepen.io/pure180/pen/KrqYpB,它可以看起来那么像这样:

mixin setAriaAttr(object) 
    - var attributes = object 
    - var ariaAttributes = {} 
    - for (attr in attributes) { 
    -  var key = 'aria-' + attr 
    -  ariaAttributes[key] = attributes[attr] 
    - } 

    div&attributes(ariaAttributes) Test 

- var aria = {'foo':'bar', 'bar':'baz'} 
+setAriaAttr(aria) 
+0

有没有办法来覆盖&属性或做一个通用的混合?我不想在每个模板上都使用这种逻辑 – ArrayKnight

+0

当然有一种方法:-),这可以让你所有的梦想成真,这里有一个混合笔:http://codepen.io/pure180/pen/KrqYpB – Daniel

+0

这不够通用。我想将它应用于任何元素。但是,谢谢。这让我足够了,可以把它放在剩下的路上。 – ArrayKnight