2012-03-16 16 views
11

Czy istnieje łatwy sposób na uniknięcie ciągu znaków, który będzie używany jako ciąg znaków JavaScript w widoku w wersji Play 2.0? Na przykład, oto prosty widok, który tworzy powiązanie z pudełka potwierdzić na onclick:Escape string JavaScript w widoku Play 2.0?

@(text:String,link:Call,message:String) 
<a href="@link" onclick="return confirm('@message');">@text</a> 

To nie powiedzie, jeśli istnieją nowe linie lub pojedyncze cudzysłowy w komunikacie. Jaki jest najlepszy sposób na zrobienie tego?

Odpowiedz

13

Można użyć Apache Commons Lang:

@(text:String, link:Call, message:String) 

@import org.apache.commons.lang3.StringEscapeUtils.escapeEcmaScript 
<a href="@link" onclick="return confirm('@escapeEcmaScript(message)');">@text</a> 

Można uniknąć wyraźnego import w szablonie, dodając je do pliku project/Build.scala:

templatesImport += "org.apache.commons.lang3.StringEscapeUtils.escapeEcmaScript" 
+0

Dzięki za rozwiązanie. :) Używam Play 2.1, a domyślną biblioteką jest 'apache-commons-lang3'. Dodałem 'org.apache.commons.lang3.StringEscapeUtils.escapeEcmaScript' do' Build.scala' i użyłem 'escapeEcmaScript' w moich szablonach zamiast' escapeJavaScript' –

+0

OK, zredagowałem swoją odpowiedź. –

+0

Czy można połączyć to z html 'play''s escaping' @Html (message) '? '@escapeEcmaScript (Html ​​(message))' - nie działa – Dfr