код сбоя без ответа (do (html5 на каждом уровне - PullRequest
2 голосов
/ 21 марта 2012

Я не могу запустить внутренний [:tr] без (do (html5 ..)), когда я использую вложенный оператор let, имеющий цикл for.

(defpartial column-settings-layout [& content]

  (html5
    [:head
     [:title "my-noir-proj"]
            (include-css "assets/css/bootstrap.css")
     ]
    [:body
     [:div
      [:div
      [:image {:src "assets/img/ceva.gif" :alt "ceva-logo"}]
        (toolbar)
        ]
     [:div {:style "overflow: auto; overflow-x: hidden"}
          content]      
      [:form {:id "col_settings_form" :name "col_settings_form" :method="post" :enctype="multipart/form-data"}
       [:input {:type "button" :value "Save" :onclick "ajaxWithSerialize('save_cols_response_div','/save_cols_settings',$(col_settings_form).serialize());"}]
       [:table {:class "table-striped" :border "1"}

            [:tr [:td {:id "processing_status" }  ][:td {:id "save_cols_response_div" :colspan 6}  ]]
            [:tr [:td ][:td {:colspan "3"} "SP" ] [:td {:colspan "3"} "WP"]]
            (let [wp_settings (session/get :wp_settings)
                 sp_settings (session/get :sp_settings)]

                (do (html5 [:tr [:td {:colspan "7"} "jhyghjghj"]]))
                    (for [col (:all_cols (session/get :setting_doc))]
                      (let 
                        [
                         dest_station (keyword (session/get :dest_station))
                         ;col_nm  (:col_nm (nth col 1))
                         field_nm  (nth col 0)                   
                         sp_col_nm (:col_nm (field_nm (dest_station sp_settings)))
                         wp_col_nm (:col_nm (field_nm (dest_station wp_settings)))                                
                         sp_editable (:editable (field_nm (dest_station sp_settings)))
                         wp_editable (:editable (field_nm (dest_station wp_settings)))

                         ]   
                        (do (html5 [:tr[:td "sfsdfgfds"]] 
                          [:tr 
                           [:th { :align "right"  :class "input-small" } field_nm ] 
                           [:td {:title sp_editable }[:input {:type "text" :class "input-large" :name (str "page_sp[" dest_station "][" field_nm "][col_nm]")  :value sp_col_nm } ] ] 
                           [:td [:input {:type "checkbox" :name (str "page_sp[" dest_station "][" field_nm "][col_nm]") :value field_nm}]]
                         [:td [:input {:type "checkbox" :name (str "page_sp[" dest_station "][" field_nm "][editable]") :value field_nm}]]
                         [:td {:title wp_editable }[:input {:type "text" :class "input-large" :name (str "page_wp[" dest_station "][" field_nm "][col_nm]")  :value wp_col_nm} ] ] 
                           [:td [:input {:type "checkbox" :name (str "page_wp[" dest_station "][" field_nm "][col_nm]") :value field_nm}]] 
                         [:td [:input {:type "checkbox" :name (str "page_wp[" dest_station "][" field_nm "][editable]") :value field_nm}]]
                          ]))
                  )
                    )

            )
       ]
       ]
         (footer)

    ;my includes of js and css
    ]]))

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Вероятно, ваша проблема в том, что вы пытаетесь сделать что-то вроде

[:tr (for ... [:td .])]

, что приводит к неверному формату икоты

[:tr [[:td ..] [:td ..] ..]] ; note the vector of vectors inside the :tr

, где ожидание сбоя

[:tr [:td ..] [:td ..] ..] ; :td vectors are direct elements of :tr

Чтобы получить ожидаемое форматирование, вам нужно что-то вроде

(into [:tr] (for ... [:td .]))

update: причина, по которой ваша конструкция (html ..) также устраняет эту проблему, заключается в том, что она переворачивает всю последовательностьотформатированных тегов икота в одну строку HTML.И вы можете бросить do - он не делает ничего полезного.

1 голос
/ 21 марта 2012
(html5 
 [:tr ...]
 (for ...))

do для побочных эффектов, икота является чисто функциональной, без побочных эффектов. Вам нужно вернуть вектор с большим количеством материала, а не каким-то образом вернуть один вектор, а затем другой.

...