[英]In Pug Interpolation, what's the real difference between using buffered code and using #{..}?
如插值文档中所述:
- var title = "On Dogs: Man's Best Friend"; - var author = "enlore"; - var theGreat = "<span>escape;</span>": h1= title p Written with love by #{author} p This will be safe: #{theGreat}
title
遵循本地评估模板的基本模式,但#{
和}
之间的代码被评估、转义,并将结果缓冲到正在呈现的模板的 output 中。这可以是任何有效的 Javascript 表达式,因此您可以做任何感觉良好的事情。
但是, h1= title
中的缓冲代码仍然是“已评估、转义、缓冲...”,并且“支持 JavaScript 表达式的全部范围”,如此处所述。
那么区别是什么呢? 我想不通。
缓冲代码以
=
开头。 它评估 JavaScript 表达式并输出结果。 为了安全起见,缓冲代码首先被 HTML 转义。
#{
和}
之间的代码被评估、转义,并将结果缓冲到正在呈现的模板的 output 中。这可以是任何有效的 Javascript 表达式,因此您可以做任何感觉良好的事情。
所以,他们俩:
即他们都做同样的事情。 那该用哪一个呢? 我的直觉说:
例子:
// Normal JS variables
- const name = 'John'
- const greeting = `Hello ${name}!`
// Buffered code
p= greeting // 1
p= 'Hello ' + name + '!' // 2
p= `Hello ${name}!` // 3
// Interpolation
p Hello #{name}! // 4
p #{greeting} // 5
p #{'Hello ' + name + '!'} // 6
p #{`Hello ${name}!`} // 7
// Output in all cases:
<p>Hello John!</p>
请注意,数字 3 和 7 使用模板文字。 不要与 Pug 的字符串插值(数字 4-7)相混淆。
在我看来:
#{
和}
中的 JS 表达式之外不包含任何其他内容,因此为了清楚起见,您不妨使用缓冲代码。 (但您可能更喜欢它们,这很好。这是个人喜好问题。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.