1

我有以下加载到模板中的 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

所以我知道从请求中获取用户名不是问题,因为上面的代码做了它应该做的事情。

我在这里做错了什么?

4

2 回答 2

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

于 2013-09-09T05:47:50.443 回答
0

由于您有一个包含 ${fullname} 的标签,因此您可以使用转换

[:#alter-username] (content (fullname request))

并将任何文本放入标签中。模板中给出的标签的内容无论如何都会被替换。

于 2013-12-26T10:15:35.490 回答