【问题标题】:Clojure Enlive: Applying snippet on a listClojure Enlive:在列表中应用片段
【发布时间】:2014-12-02 02:44:25
【问题描述】:

我正在尝试为 html 表定义一个实时模板,该模板显示来自地图的数据。 template-div 这个例子是正确的here。模板中单元格的虚拟内容是here

defsnippet 表示单元格值,deftemplate 定义为:

(require '[net.cgrand.enlive-html :as html])

(html/defsnippet value-cell (template-div) [:div.Row :div.Cell] [value]
          (html/content value))

但是,当我尝试 sn-p

(value-cell (mapv vals (:event-data dummy-content)))

所有的值都在一个这样的标签中

({:tag :div, :attrs {:class "Cell"}, 
:content ("end time 1" "date 1" "event name 1" "start time 1"  "performer 1" "end time 2" "date 2" "event name 2" "start time 2" "performer 2")})

我需要列表中的每一项都成为标签中的一个值。

【问题讨论】:

    标签: html clojure enlive


    【解决方案1】:

    您正在将值列表传递给 value-cell,因此 value-cell 应该类似于:

    (html/defsnippet value-cell (template-div)
      [:div.Row :div.Cell]
      [values]
      (html/clone-for [value values]
                      (html/content value)))
    

    【讨论】:

    • 是的,就是这样,我正在玩 clone-for 但无法弄清楚。
    • 哦,还有,如何将每个地图中的数据放入单独的行中,因为这个 (html/deftemplate mshp (index) [cont] [:div.Row] (html/content (map value-cell (mapv vals (:event-data dummy-content))))) 不起作用?
    • 同样的问题。您所说的 enlive 是“更改 :div.Row for ... 的内容”。您要告诉它的是“为每个创建一个类似 :div.Row 的内容”,这将转换为 clone-for
    • 是的,但是,如何在每张地图上应用 clone-for,我需要 clone-for 单元格,然后 clone-for 行?
    • 如果我理解正确,您希望地图上的每个条目都有一个 :div.Row,而不是每个条目一个 :div.Cell。如果是这种情况,你要克隆的是整个 :div.Row,所以你的 value-cell sn-p 应该被称为 value-row 并且类似于 (... [:div.Row] [event -data] (clone-for [[kv] event-data] [:div.Cell] (content v)))
    猜你喜欢
    • 2013-01-04
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    相关资源
    最近更新 更多