我有以下html加载到模板中...
Welcome <b id="alert-username">${fullname}</b>
Run Code Online (Sandbox Code Playgroud)
我在模板中有以下选择器/操作...
[:#alert-username] (replace-vars {:fullname (fullname request)})
Run Code Online (Sandbox Code Playgroud)
这呈现如下......
Welcome ${fullname}
Run Code Online (Sandbox Code Playgroud)
这显然不是我想要的.
但是,如果我这么做的话,它会起作用......
[:#alert-username] (fn [n] (assoc n :content [(fullname request)]))
Run Code Online (Sandbox Code Playgroud)
产量......
Welcome Bill
Run Code Online (Sandbox Code Playgroud)
所以我知道从请求中获取用户名并不是一个问题,因为上面的代码完成了它应该做的事情.
我在这做错了什么?
该replace-vars转换并不会递归到子节点,包括文本内容.选择器:#alert-username选择<b id="alert-username">标记:
{:tag :b, :attrs {:id "alert-username"}, :content ["${fullname}"]}
Run Code Online (Sandbox Code Playgroud)
因此,replace-vars因为它在标记上使用,将搜索标记的属性并忽略标记的内容.
您可以使用以下内容将变换应用于内容:
[:#alert-username] (transform-content
(replace-vars {:fullname (fullname request)}))
Run Code Online (Sandbox Code Playgroud)
但是,这也将搜索任何子标记属性以及任何子文本节点.
注:该transform-content宏是部分net.cgrand.enlive-html命名空间.