【问题标题】:Escaping newlines in Jade scripts在 Jade 脚本中转义换行符
【发布时间】:2013-06-11 07:46:33
【问题描述】:

我有一个 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 错误。

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

【问题讨论】:

  • 如果你写成这样 - "!{person.contactInfo}" - 怎么办?
  • 不幸的是,在这种情况下使用刘海没有任何区别。

标签: node.js express pug


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

【讨论】:

    猜你喜欢
    • 2014-08-16
    • 2012-11-24
    • 2017-06-23
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    相关资源
    最近更新 更多