有些人表示混淆使用clone-for
将动态生成的元素列表插入到包含多个虚拟元素的模板中。例如,模板可能如下所示,
<ul>
<li>foo</li>
<li>bar</li>
<li>baz</li>
</ul>
我们希望像这样生成HTML,
<ul>
<li>real</li>
<li>data</li>
<li>here</li>
<li>wurdz</li>
</ul>
尝试的天真之物就像是
(defsnippet my-snippet "my-template.html" [:ul] [items]
[[:li first-of-type]] (clone-for [ii items]
[:li] (content ii)))
但是,第二个到第n个元素留下虚拟数据。我们如何简单地删除所有虚拟元素并替换为真实元素?
答案 0 :(得分: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] ...))
删除所有虚拟节点,并使用我的内容插入新节点。
答案 1 :(得分:4)
我认为不同的方法可能是这样的:
(defsnippet my-snippet "my-template.html" [:ul [:li (nth-of-type 1)]] [items]
[:li] (clone-for [ii items]
[:li] (content ii)))
(deftemplate my-template "my-template.html"
[items]
[:ul] (content (my-snippet items)))
首先,使用要使用实际数据克隆的特定元素定义片段,然后可以定义模板并替换要放置片段的元素的内容。这样您就不必删除虚拟节点。