是否可以使用enlive将值附加到属性?
示例:我有这个
<a href="/item/edit/">edit</a>
并希望这个
<a href="/item/edit/123">edit</a>
我目前正在这样做:
(html/defsnippet foo "views/foo.html" [:#main]
[ctxt]
[:a] (html/set-attr :href (str "/item/edit/" (ctxt :id))))
但我不希望将ID嵌入到我的代码中,只需将id附加到现有网址
(html/defsnippet foo "views/foo.html" [:#main]
[ctxt]
[:a@href] (html/append (ctxt :id)))
答案 0 :(得分:6)
@ddk答案是现货,但您可能更喜欢更通用的方法来解决问题
(defn update-attr [attr f & args]
(fn [node]
(apply update-in node [:attrs attr] f args))))
然后
(update-attr :href str "123")
答案 1 :(得分:5)
您可以始终以与append-attr
相同的方式编写自己的set-attr
。这是我的尝试
(defn append-attr
[& kvs]
(fn [node]
(let [in-map (apply array-map kvs)
old-attrs (:attrs node {})
new-attrs (into {} (for [[k v] old-attrs]
[k (str v (get in-map k))]))]
(assoc node :attrs new-attrs))))
在将"/bar"
添加到href
时,以下内容为:<a href="/foo">A link</a>
((append-attr :href "/bar")
{:tag :a, :attrs {:href "/foo"}, :content "A link"})
;=> {:tag :a, :attrs {:href "/foo/bar"}, :content "A link"}