2013-09-28 23 views
4

this google groups topic如何使用enlive的克隆與HTML模板刪除虛擬子元素

有幾個人用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個元素。我們如何簡單地刪除所有的虛擬元素,並用真正的元素替換?

回答

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

這將刪除所有虛擬節點,並插入新的與我的內容。

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

首先,定義與具體內容要與實際數據克隆片段,那麼你可以定義一個模板,更換要放置片段的元素的內容。這樣你就不必刪除虛擬節點。