2014-01-27 4 views
0

Проблема: Enlive сниппет делает обалденный HTMLEnlive фрагмент кода дает мне странный 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)) 

Содержание базы .html:

<html> 
    <head> 
    <link rel=stylesheet href="css/base.css"> 
    </head> 
    <body> 
    </body> 
</html> 

Содержание nav.html:

<nav> 
    <ul> 
    <li>FlatNotes</li> 
    </ul> 
</nav> 

HTML, когда локальный: посещается 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>" 

Может быть, я ошибаюсь, о чем [:*] или существует фундаментальное недоразумение, или есть пропасть, о которой я не знаю. Я уже сократил код до минимального, так что я могу так ломать.

ответ

4

:* представляет универсальный селектор. Это соответствует каждый элемент в nav.html - nav, ul и li - что означает, что нав фрагмент является:

<nav> 
    <ul> 
    <li>FlatNotes</li> 
    </ul> 
</nav> 

<ul> 
    <li>FlatNotes</li> 
</ul> 

<li>FlatNotes</li> 

Селектор вы передаете к определению сниппета должен указывать на одного, верхнего уровня элемента вашего сниппета , Если вы измените :* в соответствии с одним элементом (т. Е. :nav), он должен предоставить вам фрагмент, который вы ищете.

Смежные вопросы