在Jade脚本中转义换行符

时间:2013-06-10 23:18:17

标签: node.js express pug

我有一个带有这些行的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."
            }
...

...会抛出意外的令牌错误。

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

1 个答案:

答案 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,这样你就没有做任何时髦的事情。