2016-07-05 65 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