2012-03-13 7 views
5

मैं क्लोजर के साथ एक वेब एप्लिकेशन विकसित कर रहा हूं, वर्तमान में Ring, Moustache, Sandbar और Hiccup के साथ।क्लोजर और उसके वेब ढांचे के साथ रेल के url_for जैसी कार्यक्षमता को मैं कैसे कार्यान्वित करूं?

(def web-app 
    (moustache/app 
    ;; matches things like "/job/32/foo/bar" 
    :get [["job" id & step] 
     (fn [req] (web.controllers.job/show-job id step))])) 

दृश्य मेरी नियंत्रक में: मैं एक विशेष एक विशेष कार्य इस तरह परिभाषित के लिए (सादगी के लिए छोड़े गए अन्य मार्गों) बहु-चरण के रूप में कदम दिखाने के लिए काम नाम के एक संसाधन है, और एक मार्ग है प्रस्तुत करता है, एक ही नौकरी के भीतर अन्य चरणों के लिंक हैं। फिलहाल, इन यूआरएल हाथ से निर्मित होते हैं, उदाहरण के लिए (str "/job/" id step)। मुझे यूआरएल के उस हार्ड-कोडेड "/job/" भाग को पसंद नहीं है, क्योंकि यह मूंछ मार्ग में परिभाषित किए गए दोहराता है; अगर मैं मार्ग बदलता हूं तो मुझे अपने नियंत्रक को बदलने की ज़रूरत है, जो मेरी देखभाल करने की तुलना में एक कठिन युग्मन है।

मुझे पता है कि रेल 'अनुमार्गण प्रणाली तरीकों मापदंडों से यूआरएल उत्पन्न करने के लिए है, और काश मैं इसी तरह की सुविधा थी, यानी काश मैं एक समारोह url-for कि मैं इस तरह कह सकते हैं था:

(url-for :job 32 "foo" "bar") 
; => "/job/32/foo/bar" 

है वहाँ एक क्लोजर वेब ढांचा है जो इसे आसान बनाता है? यदि नहीं, तो इस पर विचार क्या किया जा सकता है कि यह कैसे लागू किया जा सकता है?

उत्तर

4

नोयर something similar प्रदान करता है। इसे url-for भी कहा जाता है।

+0

अच्छा है! मैंने नोएर को कई बार देखा है, लेकिन अब तक मुझे मूंछ के अधिक न्यूनतम दृष्टिकोण पसंद आया है। मैं आज यह देखने के लिए थोड़ा प्रयोग करूंगा कि नोएर मेरी आवश्यकताओं के अनुरूप है या नहीं। – Gert

2

आपके द्वारा वर्णित उदाहरण कार्य को नीचे के रूप में कार्यान्वित किया जा सकता है। लेकिन मुझे यकीन नहीं है कि यह वही है जो आप खोज रहे हैं।

(defn url-for [& rest] 
    (reduce 
     #(str %1 "/" %2) "" (map #(if (keyword? %1) (name %1) (str %1)) rest))) 
+0

धन्यवाद, लेकिन यह अनिवार्य रूप से यूआरएल को कड़ी-कोडिंग के समान ही होगा, क्योंकि यह फ़ंक्शन केवल अनुवाद करेगा: "नौकरी /" में नौकरी। – Gert

संबंधित मुद्दे