Живой фрагмент, дающий мне странный HTML
Проблема: оживить сниппет в стиле фанк HTML
Визуальная справка о проблеме: http://i.imgur.com/FIOzgZv.png
Смотрите нижний фрагмент кода для странного HTML в вопросе
(ns notebook.handler
(:require [compojure.core :refer :all]
[compojure.handler :as handler]
[compojure.route :as route]
[net.cgrand.enlive-html :as html]))
(html/defsnippet nav "templates/nav.html" [:*]
[])
(html/deftemplate home-page "templates/base.html"
[]
[:body] (html/prepend (nav)))
(defroutes app-routes
(GET "/" [] (home-page))
(route/resources "/")
(route/not-found "Not Found"))
(def app
(handler/site app-routes))
Содержимое base.html:
<html>
<head>
<link rel=stylesheet href="css/base.css">
</head>
<body>
</body>
</html>
Содержимое nav.html:
<nav>
<ul>
<li>FlatNotes</li>
</ul>
</nav>
HTML при посещении localhost:3000:
<html>
<head>
<link href="css/base.css" rel="stylesheet" />
</head>
<body><nav>
<ul>
<li>FlatNotes</li>
</ul>
</nav><ul>
<li>FlatNotes</li>
</ul><li>FlatNotes</li>
</body>
</html>
(reduce str (html/emit* (nav)))
показывает странный HTML, означающий, что проблема возникает в defsnippet
до deftemplate
:
"<nav>\n <ul>\n\t<li>FlatNotes</li>\n </ul>\n\n</nav><ul>\n\t<li>FlatNotes</li>\n </ul><li>FlatNotes</li>"
Может я ошибаюсь по поводу чего [:*]
или есть фундаментальное недоразумение, или есть ошибка, о которой я не знаю. Я уже сократил код до минимального, насколько я могу, lolidk.
1 ответ
:*
представляет универсальный селектор. Это соответствует каждому элементу в nav.html - nav
, ul
, а также li
- это означает, что навигационный фрагмент:
<nav>
<ul>
<li>FlatNotes</li>
</ul>
</nav>
<ul>
<li>FlatNotes</li>
</ul>
<li>FlatNotes</li>
Селектор, который вы передаете в определение фрагмента, должен указывать на один элемент верхнего уровня вашего фрагмента. Если вы измените :*
соответствовать одному элементу (т.е. :nav
), он должен дать вам фрагмент, который вы ищете.