코드를 두 부분으로 나누면 이해하기 더 쉽습니다.
첫 번째 부분 $("#reviews").append("<%= ... %>");은 erb가있는 자바 스크립트입니다. 이것은 <%= ... %>내부의 루비 코드가 반환하는 모든 것으로 대체 된다는 것을 의미 합니다. 대체 결과는 유효한 자바 스크립트 여야합니다. 그렇지 않으면 클라이언트가 처리하려고 할 때 오류가 발생합니다. 그래서 그것이 첫 번째입니다 : 유효한 자바 스크립트 가 필요 합니다 .
고려해야 할 또 다른 사항은 루비가 생성하는 모든 것이 큰 따옴표로 된 자바 스크립트 문자열 안에 포함되어야한다는 것 <%= ... %>입니다.. 즉, 생성 된 자바 스크립트는 다음과 같습니다.
$("#reviews").append("...");
이제 .NET 내부의 루비 부분을 살펴 보겠습니다 <%= ... %>. 무엇을 render(:partial => @review)합니까? 부분 렌더링입니다. 즉, html, css 등 모든 종류의 코드를 렌더링 할 수 있습니다.
그렇다면 부분에 이와 같은 간단한 html이 있으면 어떻게 될까요?
<a href="/mycontroller/myaction">Action!</a>
자바 스크립트가 큰 따옴표로 묶인 문자열을 매개 변수로 사용하고 있다는 것을 기억하십니까? 단순히 <%= ... %>를 해당 부분의 코드로 바꾸면 문제가 발생합니다. 바로 뒤에 href=큰 따옴표가 있습니다! 자바 스크립트가 유효하지 않습니다.
// Without escaping, you get a broken javascript string at href
$("#reviews").append("<a href="/mycontroller/myaction">Action!</a>");
이런 일이 발생하지 않게하려면 이 특수 문자 를 이스케이프 하여 문자열이 잘리지 않도록해야합니다. 대신 이것을 생성하는 것이 필요합니다.
<a href=\"/mycontroller/myaction\">Action!</a>
이것은 무엇을 escape_javascript합니다. 반환 된 문자열이 자바 스크립트를 "중단"하지 않는지 확인합니다. 이를 사용하면 원하는 출력을 얻을 수 있습니다.
$("#reviews").append("<a href=\"/mycontroller/myaction\">Action!</a>")
문안 인사!