【发布时间】:2011-07-24 21:02:08
【问题描述】:
我目前正在开发一个小型 CMS,使用出色的 Enlive 作为模板引擎。 Enlive 有一个名为 at 的宏,它接受一个指定 HTML sn-p 的节点(映射)和任意数量的元组,每个元组由一个选择器(一个向量)和一个转换(一个闭包)组成。
(at a-node
[:a :selector] a-transformation
[:another :selector] another-transformation
...)
现在我想根据传入的数据/上下文生成元组。我尝试了很多不同的事情,但都没有成功。例如
(let [this (repository/u "http://example.com/ACMECorp")
statements (repository/find-by-subject this)
context {:depth 1}]
`(at (snippet-for 'this 'context)
[root] (set-attr :about (str 'this))
~@(loop [rules []
st statements]
(if-not (seq st)
rules
(recur (conj rules
`[:> (attr= :property ~(str (repository/predicate (first st))))]
`(content (renderit ~(repository/object (first st)) 'context)))
(rest st))))))
非常感谢任何帮助。
-乔辰
【问题讨论】:
-
我建议查看宏扩展。在 repl:macroexpand-1;在 SLIME 中:slime-macroexpand-1。可能是您创建的表单不正确。