2011-12-22 9 views
8

Estoy tratando de utilizar esta sección de código del ejemplo de pestañas de jQuery UI y convertirlo a Coffeescript. Lo he ejecutado a través de la impresionante herramienta http://js2coffee.org/.Cómo escapar de la interpolación de cadenas en Coffeescript

var tabTitle = $("#tab_title"), 
    tabContent = $("#tab_content"), 
    tabTemplate = "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close'>Remove Tab</span></li>", 
    tabCounter = 2; 

El problema es que tabTemplate variable declaration. Coffeescript está tratando de hacer una interpolación de cadenas, por lo que yo sé. Intenté escapar con una barra inclinada, pero eso solo resuelve usar una barra inclinada en los js convertidos.

Respuesta

15

Use comillas simples para delimitar la cadena: http://coffeescript.org/#strings

Si desea utilizar comillas simples dentro de su cadena sin escapar manualmente puede usar 3 comillas simples:

x = ''' 
my string's ok with single quotes and #{doesn't interpolate} 
''' 

Dicho esto , esto es HTML, por lo que las comillas dobles son en realidad más comunes para los atributos que las comillas simples. Su cadena por lo tanto, se podría escribir como:

tabTemplate = '<li><a href="#{href}">#{label}</a> <span class="ui-icon ui-icon-close">Remove Tab</span></li>' 

sin ningún problema.

+2

Yuck. ¿Es eso lo mejor que podemos hacer? ¿Por qué no funcionan las comillas dobles? –

+0

Porque las cadenas de comillas dobles son las que provocan la interpolación :) Esa es la diferencia entre cadenas dobles e individuales. Ver http://coffeescript.org/#strings – nicolaskruchten

+2

Todavía asco. ¿Hay alguna forma de escapar de la cadena completa, como lo hace C# con @ "some \ string"? –

7

Escapar con barra invertida hace el trabajo:

$ coffee -bce '"\#{a}"' 
"\#{a}"; 

$ coffee -bce '"#\{a}"' 
"#\{a}"; 
+0

Entonces, podemos hacer: str = "\" # {texto envuelto con comillas dobles} \ "" – YaTaras

Cuestiones relacionadas