处理指定 - 当传递 Handlebars 表达式时,转义单引号和双引号。

22

HTML 和 Handlebars:

onclick='shareItem("{{name}}")'> 

在名称中包含双引号时,未能成功地传递安全转义的名称。

onclick="shareItem('{{name}}')"> 

当名称中有单引号时,无法成功地传递安全转义的名称。

我需要处理两种情况 - 甚至在同一个字符串中也要这样。

不得不定义一个JS变量并将其传递给反斜杠添加器感觉很笨拙。

是否有更清晰的使用Handlebars或Moustache的方法?

2个回答

22

您需要注册一个内联助手来操纵上下文。在您的情况下,您需要转义单引号或双引号。

Handlebars.registerHelper('escape', function(variable) {
  return variable.replace(/(['"])/g, '\\$1');
});

通过注册这样的帮助程序,您可以使用变量来实现您想要的效果。

{{ escape name }} # expects to escape any ' or "

我在jsfiddle上写了一个简单的例子来演示这个问题:http://jsfiddle.net/VLy4L/


谢谢您的回复!我在这里看到的问题是,我将变量直接添加到onClick事件中作为表达式,这就是它出错的地方。我唯一看到的解决方法是将表达式放入JavaScript中,但这感觉很不专业。 - Kate
1
@Kate 也许你可以使用data-*属性来临时存储数据,然后在JavaScript函数中访问它? - Seyeong Jeong
1
谢谢,Seyeong!我已经这样做了——在将名称设置为 data-* 属性后,在 onClick 事件中传递整个对象。 - Kate
@SeyeongJeong,请同时转义转义斜杠。否则,引号前面的反斜杠会破坏“escape”助手:Handlebars.registerHelper('escape', function(variable) { return variable.replace(/(['"\\])/g, '\\$1'); }); - famzah

21

我在尝试转义单引号时遇到了问题,我使用的是handlebars提供的helper,你可以使用三个大括号 {{{ 变量 }}} 进行转义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接