我在enlive中创建了一个模板,并且在使用这个产生lazyseq的代码片段时出现问题。当我在REPL中尝试这个剪辑时,会生成“clojure.lang.LazySeq@ba6da9f2”。
(h/sniptest (template-div)
[:div.Row] (h/content (map #(value-cell %)
(for [e(:data-content msh-contents)]
(vals e)))))
测试此代码所需的其余代码如下所示
(require '[net.cgrand.enlive-html :as h])
(def msh-contents {:title "Events mashup",
:data-content [{:title "ICTM Study Group ",
:url "http://some-url.com"}
{:title "Volodja Balzalorsky - Hinko Haas",
:url "http://some- other-url.com"}
]})
(defn template-div[] (h/html-resource "index.html"))
(h/defsnippet value-cell (template-div)
[:div.Row :div.Cell] [value]
(h/content value))
index.html文件看起来像这样(它也可以在这里找到http://www.filedropper.com/index_25))
<div class="Table">
<div class="Title">
<p>This is a Table</p>
</div>
<div class="Heading">
<div class="Cell">
<p>Heading 1</p>
</div>
</div>
<div class="Row">
<div class="Cell">
<p>Row 1 Column 1</p>
</div>
</div>
我看到了类似的问题,但解决方案是使用内容而不是html-content。不知道是什么原因引起了这个问题...
答案 0 :(得分:1)
来自https://github.com/cgrand/enlive/wiki/Getting-started
的示例x=> (sniptest "<html><body><span>Hello </span>"
[:span] (append "World"))
"<html><body><span>Hello World</span></body></html>"
来自html-resource
docstring:"Loads an HTML resource, returns a seq of nodes."
请注意,在示例中,源是以html字符串的形式而不是seq of nodes
。为什么它的工作方式与我相同,但您可能需要以下内容:
(h/sniptest (clojure.string/join (h/emit* (template-div))) ; this feeds it a html str instead
[:div.Row] (h/content (map #(value-cell %)
(for [e(:data-content msh-contents)]
(vals e)))))
PS:你使用sniptest是什么因为我不知道它到现在为止存在。然后我再次以奇怪的方式使用enlive(没有deftemplates或defsnippets,使用hiccup样式的html,以及大量使用宏)。