2015-08-06 2 views
0

Я новичок в Clojure, и я пытаюсь создать страницу, на которой вы можете увидеть все новости, которые находятся в таблице слева, и только спортивные новости в правой части страницы. Я пытался добавить новый параметр в clostache/рендеринга:Более одного параметра в функции clostache/render?

(defn render-template [template-file params param] 
    (clostache/render (read-template template-file) params param)) 

(defn welcome [] 
    (render-template "index" {:sports (model/justSports)} {:news (model/all)})) 

где модель/все и модель/justSports являются:

(defn all [] 
    (j/query mysql-db 
    (s/select * :news))) 

(defn justSports [] 
    (j/query mysql-db 
    (s/select * :news ["genre = ?" "sports"]))) 

и новости должны быть показаны, как это:

<div style="background-color: #D3D3D3; width: 450px; height: 800px; position: absolute; right: 10px; margin-top: 10px; border-radius: 25px;"> 
     <sections> 
     {{#sports}} 
     <h2>{{title}}</h2> 
     <p>{{text}}<p> 
     {{/sports}} 
     </sections> 
     </div> 

     <div class="container" style="width: 500px; height: 800px; position: absolute; left: 20px;"> 
     <h1>Listing Posts</h1> 
     <sections> 
     {{#news}} 
      <h2>{{title}}</h2> 
      <p>{{text}}<p> 
     {{/news}} 
    </sections> 
    </div> 

Но это не сработает. Он просто показывает данные из первого параметра на странице. Как вы думаете, как я могу это сделать?

P.S. Не против уродливого CSS, я буду работать над этим :)

ответ

1

Следующие должны заставить его работать:

(defn render-template [template-file params] 
    (clostache/render (read-template template-file) params)) 

(defn welcome [] 
    (render-template "index" {:sports (model/justSports) 
          :news (model/all)})) 

render имеет три "арностей":

(defn render 
    "Renders the template with the data and, if supplied, partials." 
    ([template] 
    (render template {} {})) 
    ([template data] 
    (render template data {})) 
    ([template data partials] 
    (replace-all (render-template template data partials) 
        [["\\\\\\{\\\\\\{" "{{"] 
        ["\\\\\\}\\\\\\}" "}}"]]))) 

Вы вызывали перегрузку 3-арности, которая принимает [template data partials], поэтому вторая карта с ключом :news принималась за partials by clostache. Вы хотите назвать версию 2-arity, которая занимает всего [template data], минуя одну карту с ключами :news & :sports.

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