Живой фрагмент, дающий мне странный 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), он должен дать вам фрагмент, который вы ищете.

Другие вопросы по тегам