我有一个带有这些行的Jade模板:
html
head
title Person Details
script
var Person = function () {
this.name = "#{person.name}",
this.contactInfo = "#{person.contactInfo}"
}
...
当我渲染这个模板时,我传递了一个person
对象。
问题是我传递给模板的一些字段(例如上面的person.contactInfo
)可能有换行符,渲染过程会输出如下内容:
<html>
<head>
<title>Person Details</title>
<script>
var Person = function () {
this.name = "Joe Schmoe",
this.contactInfo = "Phone: 555-1234.
Address: 555 Main St."
}
...
...会抛出意外的令牌错误。
我可以转义换行符以避免此问题吗?或者我必须在将数据发送到渲染引擎之前将它们转义?
答案 0 :(得分:1)
据我所知,将数据渲染成脚本是不好的做法。我想这就是看你正在经历的问题。一个可能更好的选择是使用#{JSON.stringify(person)}
,然后在客户端使用JSON.parse()
解析它。这样您就不必担心person
对象中的字符是什么,因为JSON
对象正在为您处理这些字符。
html
head
title Person Details
body
input(type="hidden", name="person", value="#{JSON.stringify(person)}")
script
var Person = function () {
var _person = document.querySelectorAll('input[name="person"]').value;
_person = JSON.parse(_person);
for (var key in _person) {
this[key] = _person[key];
};
};
...
从语义上讲,我会把它放在一个输入标签中,这真的很奇怪,谁知道呢。理想情况下,我认为你应该在页面加载时使用XMLHttpRequest并使用JSON作为content-type
,这样你就没有做任何时髦的事情。