0

我有一个 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."
            }
...

...引发 Unexpected Token 错误。

我可以转义换行符以避免这个问题吗?或者我必须在将数据发送到渲染引擎之前转义它们吗?

4

1 回答 1

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,这样您就不会做任何时髦的事情。

于 2013-06-10T23:46:33.577 回答