2012-10-01 16 views
7

का उपयोग करके स्टाइल जानकारी प्रस्तुत करने का बेवकूफ तरीका मुझे "शीर्ष" और "बाएं" चर द्वारा संकेतित किसी स्थान पर तत्व रखने के लिए हिचकी के भीतर शैली की जानकारी बनाने की आवश्यकता है। ([: {: "; छोड़ दिया" बाएं) शैली (str "टॉप" शीर्ष} "कुछ पाठ" div] एचटीएमएल)Clojure Hiccup

इस कोड को सुंदर है

: मेरी कोड इसलिए की तरह दिखता है बदसूरत। यदि मानक सीएसएस शैली नियमों का उपयोग करके हिचअप ने स्वचालित रूप से "शैली" विशेषता प्रदान की है तो यह अच्छा होगा ... फिर मैं निम्नलिखित लिख सकता हूं:

(html [: div {: style {: शीर्ष शीर्ष: बाएं बाएं} } "कुछ पाठ"])

क्या पहले से ही एक पुस्तकालय है जो यह करता है? या, क्या मुझे अपना खुद का समाधान रोल करने की ज़रूरत है?

किसी भी पॉइंटर्स के लिए क्लोजुरियन धन्यवाद!

उत्तर

7

आप ऐसा फ़ंक्शन लिख सकते हैं जो ऐसा करेगा, और यह मानचित्र की तुलना में थोड़ा कम टाइपिंग भी होगा। उदाहरण के लिए:

(defn style [& info] 
    {:style (.trim (apply str (map #(let [[kwd val] %] 
            (str (name kwd) ":" val "; ")) 
           (apply hash-map info))))}) 

कौन सा आप इसे इस प्रकार लिख करने की अनुमति होगी ...

(html [:div (style :top top :left left) "some text"]) 

समारोह से नमूना उत्पादन ...

user=> (style :top 32 :left 14) 
{:style "top: 32; left: 14;"} 
+0

धन्यवाद Bill- मुझे लगता है कि इस सवाल का कुछ प्रतिक्रियाओं से स्पष्ट है कि "अपनी खुद की समाधान रोलिंग" सही जवाब है, आप का सुझाव के रूप में। मैंने पूछा क्योंकि मैं एक क्लोजर लाइब्रेरी बना रहा हूं जो इस सुविधा को जोड़ता है और यह सुनिश्चित करना चाहता था कि मैं "पहिया को पुनर्निर्मित नहीं कर रहा"। – drcode

+0

@drcode मुझे अभी एहसास हुआ कि आप कौन हैं। मेरे पास लिस्प की भूमि है और मुझे यह पसंद है। धन्यवाद! – Bill

+0

इस 3 साल बाद आ रहा है ... कोड (नाम kwd) के बाद कोड ":" किसी भी भावी पाठकों के लिए वैध सीएसएस वाक्यविन्यास होने के लिए खाली स्थान नहीं होना चाहिए। –

0

ज्यादा Clojure में अभी तक, लेकिन एनिलिव की तरह एक 'रूपांतरण' आधारित दृष्टिकोण इस तरह की जरूरतों के समाधान के समान लगता है - https://github.com/cgrand/enlive

0

क्या इस बारे में:

(defn style [s] 
    (str/join ";" (map #(str (name %) ":" ((keyword %) s)) (keys s)))) 

(style {:padding  "20px" 
     :background "#e68a00" 
     :color  "white" 
     :font-size "large" 
     :font-weight "bold"})