我在enlive中有一些变换:
(html/deftemplate tranforma-numero-template "public/index.html" [m]
[:#portugues :.conteudo] (html/content (:portugues m))
[:#ingles :.conteudo] (html/content (:ingles m))
[:#espanhol :.conteudo] (html/content (:espanhol m)))
它遵循一种模式。所以我想以某种方式抽象出这种模式。我想如果这样的事情是可能的:
(html/deftemplate tranforma-numero-template "public/index.html" [m]
[(html/pred (fn [node]
(when (seq formatos)
(-> node :attrs :id (set formatos)))))] (html/content ((keyword (-> node :attrs :id)) m)))
我知道这对于这样一个简单的例子来说太过分了,但你有了这个概念。
答案 0 :(得分:0)
编写常规选择器的一种替代方法,就像您上面已经做的那样,是动态生成对deftemplate的调用。在你的例子中编写一个智能选择器和变换器也是一个很好的方法。
因为deftemplate是一个宏,如果你的模板创建代码也是一个宏,它可能会更容易。这种宏观传染是使宏成为库的主要接口的一个缺点。不幸的是,这意味着这将更加困难。 Fortuneatly产生调用deftemplate的宏甚至比智能选择器方法更简单。只需要通过适当的选择器和转换序列来调用deftemplate即可。