2013-06-10 2 views
0

나는이 같은 라인과 옥 템플릿을 가지고있다.이스케이프 줄 바꿈은

문제 I 템플릿 패스 일부 필드는 (상술 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

이렇게 작성하면 어떻게됩니까? - "! {person.contactInfo}"'대신에? – raina77ow

+0

불행히도이 경우에는 뱅을 사용하면 아무런 차이가 없습니다. –

답변

1

필자가 들었을 때, 데이터를 스크립트로 렌더링하는 것은 나쁜 습관입니다. 나는 이것이 당신이 겪고있는 것을 보는 이슈라고 생각합니다. 잠재적으로 더 나은 옵션은 #{JSON.stringify(person)}을 사용한 다음 클라이언트 측에서 JSON.parse()을 사용하여 구문 분석하는 것입니다. 이 방법을 사용하면 JSON 객체가 해당 객체를 처리하므로 어떤 문자가 person 객체에 있는지 걱정할 필요가 없습니다.

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으로 사용하는 것이 이상적입니다. 그런 식으로하면 펑키하지는 않습니다.

+0

좋은 제안, 고마워! –

관련 문제