2014-01-27 9 views
0

문제를 니펫을 : Enlive 조각 펑키 HTML을Enlive 나에게 이상한 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의 내용 : 3000 방문 : 로컬 호스트가

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

HTML은

<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은 deftemplate 전에 defsnippet에서 발생

"<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, ulli - - 그것은 모든 nav.html의 요소와 일치하는 탐색 조각은 의미

당신이 조각 정의에 전달하는 선택이 당신의 조각의 하나의 최상위 요소를 가리켜 야
<nav> 
    <ul> 
    <li>FlatNotes</li> 
    </ul> 
</nav> 

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

<li>FlatNotes</li> 

. :*을 단일 요소 (예 : :nav)와 일치하도록 변경하면 찾고자하는 스 니펫을 제공해야합니다.