Ale*_*lin 3 clojure hiccup noir
Clojure初学者在这里!我在Noir项目中为我的Hiccup代码添加了flash消息支持.
我要做的是检查是否设置了每个特定的消息字符串.如果没有消息,那么我不想显示包含该消息的特定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))])]))
Run Code Online (Sandbox Code Playgroud)
免责声明:我完全同意你不会遇到一次需要不止一次特定闪光的情况,但是我试图找出一种更好,更实用的方法来实现这一点. .
我相信有一种处理类似情况的模式.基本上我检查几个表达式的值,用这些值做一堆东西,然后根据结果进行操作.你可以用越来越多的怪物(cond)来解决这个问题,但我的解决方案至少有点清洁.
提示?
你也可以用when-let.
(defpartial layout
[& contents]
(html5
[:body
(when-let [msg (session/flash-get :error-message)]
(error-flash msg))
(when-let [msg (session/flash-get :warning-message)]
(warning-flash msg))
(when-let [msg (session/flash-get :success-message)]
(success-flash msg))
contents))
Run Code Online (Sandbox Code Playgroud)
我不是打嗝专家,但我认为这应该有效.我发现它发生的事情有点清楚,虽然它稍微冗长一些.
| 归档时间: |
|
| 查看次数: |
413 次 |
| 最近记录: |