4

この Google グループのトピックを参照してください

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 に答える