Clojure初學者在這裏!我在Noir項目中爲我的Hiccup代碼添加了Flash消息支持。打嗝條件,我可以使這更加地道?
我想要做的是檢查每個特定的消息字符串是否設置。如果沒有消息,那麼我不想顯示包含該消息的特定閃存元素。
(defpartial success-flash [msg]
[:div.alert.notice.alert-success
[:a.close {:data-dismiss "alert"} "x"]
[:div#flash_notice msg]])
(defpartial error-flash [msg]
[:div.alert.notice.alert-error
[:a.close {:data-dismiss "alert"} "x"]
[:div#flash_notice msg]])
[..]
(defpartial layout [& content]
(html5
[:head
[...]
[:body
(list
[...]
[:div.container
(let [error-msg (session/flash-get :error-message)
error-div (if (nil? error-msg)() (error-flash error-msg))
success-msg (session/flash-get :success-message)
success-div (if (nil? success-msg)() (success-flash success-msg))]
warning-msg (session/flash-get :warning-message)
warning-div (if (nil? warning-msg)() (warning-flash warning-msg))]
(list error-div success-div warning-div content))])]))
免責聲明:我完全同意你不會永遠可能在一個情況下,你需要在一次特定的那些閃光的不止一個,但在找出一個更好的沉迷在我嘗試和更多功能的實現方式。
我相信這裏有一個模式可以處理類似的情況。基本上我檢查幾個表達式的值,用這些值做一堆事情,然後根據結果採取行動。你可以用越來越多的怪物(cond)來解決這個問題,但我的解決方案至少有點乾淨。
小貼士?
我很喜歡這個,很乾淨,很到位!我有時會忘記你正在處理呃逆中的矢量,所以你可以用這種方式組合你想要的所有表情。 – 2012-08-14 20:11:53