【发布时间】:2012-08-08 07:22:39
【问题描述】:
我是 clojure 和 Web 开发堆栈的新手。我正在尝试使用 enlive 在 HTML 模板中设置值:
(en/deftemplate project-main-page
(en/xml-resource "project-main.html")
[id]
[:#project-name] (en/content (str "Name: " ((get-project id) :name)))
[:#project-desc] (en/content (str "Desc: " ((get-project id) :desc))))
这可以很好地设置我的两个 HTML 元素,但它需要重复调用我的函数 get-project。目前这只是从本地地图读取,但最终它会涉及一些外部存储访问,所以我宁愿只在这个函数中执行一次。
我正在考虑使用let:
(en/deftemplate project-main-page
(en/xml-resource "project-main.html")
[id]
(let [project (get-project id)]
[:#project-name] (en/content (str "Name: " (project :name)))
[:#project-desc] (en/content (str "Desc: " (project :desc)))))
但这只会影响描述元素并忽略名称形式。
在deftemplate 中绑定本地变量的最佳方法是什么?
【问题讨论】:
-
尝试在你的deftemplate上运行
macroexpand,它可能会提供信息。