Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 更换enlive 1.1.4中的变量_Clojure_Enlive - Fatal编程技术网

Clojure 更换enlive 1.1.4中的变量

Clojure 更换enlive 1.1.4中的变量,clojure,enlive,Clojure,Enlive,我有以下html加载到模板中 Welcome <b id="alert-username">${fullname}</b> [:#alert-username] (replace-vars {:fullname (fullname request)}) 这是呈现如下 Welcome ${fullname} 这显然不是我想要的 然而,如果我用艰难的方式去做,它会起作用 [:#alert-username] (fn [n] (assoc n :content [(fu

我有以下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
所以我知道从请求中获取用户名不是问题,因为上面的代码做了它应该做的事情


这里我做错了什么?

替换变量的转换不会递归到子节点,包括文本内容。 选择器
:#警报用户名
选择
标记:

{:tag :b, :attrs {:id "alert-username"}, :content ["${fullname}"]}
因此,
replace vars
,因为它用于标记,将搜索标记的属性并忽略标记的内容

您可以通过以下方式将转换应用于内容:

[:#alert-username] (transform-content
                     (replace-vars {:fullname (fullname request)}))
但是,这也将搜索任何子标记属性以及任何子文本节点


注意:转换内容宏是
net.cgrand.enlive html
命名空间的一部分。

替换变量转换不会递归到子节点,包括文本内容。 选择器
:#警报用户名
选择
标记:

{:tag :b, :attrs {:id "alert-username"}, :content ["${fullname}"]}
因此,
replace vars
,因为它用于标记,将搜索标记的属性并忽略标记的内容

您可以通过以下方式将转换应用于内容:

[:#alert-username] (transform-content
                     (replace-vars {:fullname (fullname request)}))
但是,这也将搜索任何子标记属性以及任何子文本节点


注意:转换内容宏是
net.cgrand.enlive html
命名空间的一部分。

因为有一个标记包含${fullname},所以可以使用转换

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

并将任何文本放入标记中。模板中给定的标记中的内容仍将被替换。

因为有一个标记包含${fullname},所以可以使用转换

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

并将任何文本放入标记中。模板中给出的标签中的内容将被替换。

非常好。我知道我必须错过一些简单的东西,比如说,我实际上认为应该改变行为来匹配你试图使用它的方式。但是,我不知道它当前运行的原因。自述文件说,“替换文本和属性中的任何${var}。”这意味着它将适用于节点的文本子级。我想至少有一个理由可以让事情变得更清楚。太好了。我知道我必须错过一些简单的东西,比如说,我实际上认为应该改变行为来匹配你试图使用它的方式。但是,我不知道它当前运行的原因。自述文件说,“替换文本和属性中的任何${var}。”这意味着它将适用于节点的文本子级。我认为至少有一个理由可以让事情变得更清楚。