讲故事的时间
在 Play 的模板方案中,我有这个简化的设置:
@(param:String)
<!DOCTYPE html>
<html> <head><!-- JQuery & Bootstrap css+js includes --></head> <body>
@param
<input type="text" data-provide="typeahead" data-source='@Html(param)' data-items="4">
</body> </html>
@Html() 在此处和此处的底部都被提及,基本上可以防止类似<
的字符被替换为<
. 我正在尝试通过 Play 的模板引擎将我从数据库中获取的Json.stringify
-ed 和Json.toJson
-ed传递List[String]
到 HTML 中,然后让 Bootstrap 从data-source
属性中自动获取它。
假设 @param 计算为一个 JSON 对象,该对象包含一个带有 的字符串'
:
<input data-provide="typeahead" data-source='["can't","hi","boom"]' data-items="4" type="text" >
我意识到需要在我的数据源 JSON 对象中转义单引号字符。起初我尝试使用\
,甚至\\\
无济于事。我什至开始为任务编写一个正则表达式替换器来模拟这里提到的 addSlashes()
然后一时兴起...
<input data-provide="typeahead" data-source='["can't","hi", "boom"]' data-items="4" type="text" >
现在一切正常!(当数据源被硬编码时。仍然需要弄清楚如何取消 @Html() 以便它'
不会消失。)
问题
为什么 Bootstrap Typeahead 需要读取未转义的单引号字符的数据源?
为后代:
val quoteRegex = """'""".r
quoteRegex.replaceAllIn(str, m => "'")