Zajmuję się tworzeniem aplikacji internetowej z Clojure, obecnie z Ring, Moustache, Sandbar i Hiccup. Mam zasobu o nazwie praca oraz trasy, aby zobaczyć konkretny krok w formie wieloetapowej dla konkretnego zadania zdefiniowane następująco (przy innych drogach pominięta dla uproszczenia):Jak zaimplementować funkcjonalność podobną do url_for Railsów z Clojure i jego frameworkami sieciowymi?
(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))]))
W widoku mojego kontrolera rendery, istnieją łącza do innych kroków w ramach tego samego zadania. Obecnie adresy URL są tworzone ręcznie, np. (str "/job/" id step)
. Nie podoba mi się ta zakodowana część adresu URL, ponieważ powtarza to, co zdefiniowałem na trasie wąsów; jeśli zmienię trasę, muszę zmienić kontroler, który jest ściślejszym sprzęgłem niż mi zależy.
wiem, że układ routingu szyn posiada metody do generowania adresów URL z parametrami i życzę miałem podobną funkcjonalność, tj Chciałbym mieć funkcję url-for
że mogę nazwać tak:
(url-for :job 32 "foo" "bar")
; => "/job/32/foo/bar"
Czy istnieje framework sieciowy Clojure, który to ułatwia? Jeśli nie, to jakie są twoje przemyślenia na temat tego, w jaki sposób można to zrealizować?
Niezły! Spoglądałem na Noir wiele razy, ale do tej pory podobało mi się bardziej minimalistyczne podejście do wąsów. Zrobię dzisiaj mały eksperyment, żeby sprawdzić, czy Noir pasuje do moich potrzeb. – Gert