首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我将如何实现类似于Rails的url_for的功能,并使用Clojure及其web框架?

我将如何实现类似于Rails的url_for的功能,并使用Clojure及其web框架?
EN

Stack Overflow用户
提问于 2012-03-13 06:57:03
回答 2查看 272关注 0票数 5

我正在使用Clojure开发一个web应用程序,目前使用的是胡须沙洲打嗝。我有一个名为job的资源,还有一条用于以多步形式显示特定步骤的路径,该步骤用于定义如下的特定作业(为了简单起见,省略了其他路径):

代码语言:javascript
复制
(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))]))

在“我的控制器”呈现的视图中,有指向同一作业中其他步骤的链接。目前,这些urls是手工构造的,例如(str "/job/" id step)。我不喜欢url中那个硬编码的"/job/"部分,因为它重复了我在胡子路径中定义的内容;如果我改变了路径,我需要改变我的控制器,这是一个比我所关心的更紧密的耦合。

我知道Rails的路由系统有从参数生成urls的方法,我希望我有类似的功能,即我希望我有一个函数url-for,我可以这样调用它:

代码语言:javascript
复制
(url-for :job 32 "foo" "bar")
; => "/job/32/foo/bar"

有没有一个Clojure web框架可以让这件事变得简单?如果没有,你对如何实现这一点有什么想法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-13 17:34:42

Noir提供类似的东西。它甚至被称为url-for

票数 4
EN

Stack Overflow用户

发布于 2012-03-13 15:14:04

您提到的示例函数可以实现如下。但我不确定这是否正是你要找的。

代码语言:javascript
复制
(defn url-for [& rest]
    (reduce 
        #(str %1 "/" %2) "" (map #(if (keyword? %1) (name %1) (str %1)) rest)))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9679573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档