5

私はClojureを使用して、現在RingMustacheSandbarHiccupを使用してWebアプリケーションを開発しています。jobという名前のリソースと、このように定義された特定のジョブのマルチステップ形式で特定のステップを表示するルートがあります(簡単にするために他のルートは省略されています)。

(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))]))

コントローラがレンダリングするビューには、同じジョブ内の他のステップへのリンクがあります。現時点では、これらのURLは手動で作成されてい(str "/job/" id step)ます。"/job/"口ひげのルートで定義したものを繰り返すので、URLのハードコードされた部分は好きではありません。ルートを変更する場合は、コントローラーを変更する必要があります。これは、私が気にかけているよりも緊密な結合です。

RailsのルーティングシステムにはパラメータからURLを生成するメソッドがあることを知っています。同様の機能があればいいのにと思います。つまり、次のurl-forように呼び出すことができる関数があればいいのにと思います。

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

これを簡単にするClojureWebフレームワークはありますか?そうでない場合、これをどのように実装できるかについてどう思いますか?

4

2 に答える 2

4

ノワールは似たようなものを提供します。それも呼ばれurl-forます。

于 2012-03-13T17:34:42.427 に答える
2

あなたが言及したサンプル関数は、以下のように実装できます。しかし、これがまさにあなたが探しているものであるかどうかはわかりません。

(defn url-for [& rest]
    (reduce 
        #(str %1 "/" %2) "" (map #(if (keyword? %1) (name %1) (str %1)) rest)))
于 2012-03-13T15:14:04.687 に答える