我将以下html加载到模板中......
Welcome <b id="alert-username">${fullname}</b>
我在模板中有以下选择器/操作...
[:#alert-username] (replace-vars {:fullname (fullname request)})
这表现如下......
Welcome ${fullname}
这显然不是我想要的。
然而,如果我这么做的话,它会起作用......
[:#alert-username] (fn [n] (assoc n :content [(fullname request)]))
产生......
Welcome Bill
所以我知道从请求中获取用户名不是问题,因为上面的代码完成了它应该做的事情。
我在这里做错了什么?
答案 0 :(得分:5)
replace-vars
转换不会递归到子节点,包括文本内容。
选择器:#alert-username
选择<b id="alert-username">
标记:
{:tag :b, :attrs {:id "alert-username"}, :content ["${fullname}"]}
因此,replace-vars
,因为它在标记上使用,将搜索标记的属性并忽略标记的内容。
您可以使用以下内容将变换应用于内容:
[:#alert-username] (transform-content
(replace-vars {:fullname (fullname request)}))
但是,它还将搜索任何子标记属性以及任何子文本节点。
注意: transform-content
宏是net.cgrand.enlive-html
命名空间的一部分。
答案 1 :(得分:0)
由于您有一个包含$ {fullname}的标记,因此您只需使用转换
即可[:#alter-username] (content (fullname request))
并在标记中添加任何文本。无论如何,模板中给出的标签内容都将被替换。