0

我正在尝试在 webnoir 中执行此操作。

这有效:

(defpage [:post "/testurl] {:keys [name phone]}
  (html5
    (str "name: " name)
    (str "phone: " phone)))

现在我想为许多模块生成 defpages,每个模块都有一个不同字段的列表。我想从一个函数中调用 defpages。defpage 必须接受该字段的帖子。

基本上我有这个:(def fields1 ["Name" "Phone" "Email" "xyz"])

而且我想将其传递给 defpage,而不必手动指定键。

这些字段将来可能会发生变化,这就是为什么我希望我的代码在服务器启动时获取字段并动态创建 defpages。

可能吗?

谢谢你的帮助!

4

1 回答 1

0

您可以使用宏执行此操作:

(defmacro defpages [pages]
  `(do
     ~@(map (fn [page]
              `(~'defpage [:post ~(str "/" (page :name))]
                 {:keys ~(into [] (map symbol (page :fields)))}
                 (~'html5
                  ~@(map (fn [field]
                           `(str ~(str field ": ")
                                 ~(symbol field)))
                         (page :fields))))) pages)))



(defpages [{:name "testurl"
            :fields ["name" "phone"]}
           {:name "user"
            :fields ["age" "address"]}])
于 2013-03-20T16:33:57.780 回答