如何使用带有HTML模板的enlive的clone-for来删除虚拟子元素

Joh*_*own 4 html clojure enlive

请参阅此google群组主题

有些人表示混淆使用clone-for将动态生成的元素列表插入到包含多个虚拟元素的模板中.例如,也许模板看起来像这样,

<ul>
    <li>foo</li>
    <li>bar</li>
    <li>baz</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我们想要像这样生成HTML,

<ul>
    <li>real</li>
    <li>data</li>
    <li>here</li>
    <li>wurdz</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

尝试天真的事情是这样的

(defsnippet my-snippet "my-template.html" [:ul] [items] 
    [[:li first-of-type]] (clone-for [ii items]
                             [:li] (content ii)))
Run Code Online (Sandbox Code Playgroud)

但是这会留下第二到第n个元素和虚拟数据.我们怎样才能简单地删除所有虚拟元素并替换为真实元素?

Joh*_*own 5

我一直在使用的解决方案是做类似的事情,

(defsnippet my-snippet "my-template.html" [:ul] [items]
  [[:li (html/but html/first-of-type)]] nil
  [[:li html/first-of-type]] (html/clone-for [ii items] ...))
Run Code Online (Sandbox Code Playgroud)

这将删除所有虚拟节点,并使用我的内容插入新节点.