4

看到这个谷歌组主题

一些人对使用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)))

但这会为第 2 到第 n 个元素留下虚拟数据。我们如何才能简单地删除所有虚拟元素并用真实元素替换?

4

2 回答 2

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] ...))

这会删除所有虚拟节点,并在我的内容中插入新节点。

于 2013-09-28T16:21:35.770 回答
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)))

首先,您使用要使用真实数据克隆的特定元素定义片段,然后您可以定义模板并替换要放置片段的元素的内容。这样您就不必删除虚拟节点。

于 2013-09-29T00:02:39.023 回答