2011-12-22 8 views
8

Próbuję użyć tej sekcji kodu z przykładu zakładki jQuery UI i przekonwertować ją na Coffeescript. Przeprowadziłem to przez niesamowite narzędzie http://js2coffee.org/.Jak uniknąć interpolacji napisów w Coffeespptrze

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; 

Problem polega na tym, że deklaracja zmiennej tabTemplate. Coffeescript próbuje na tej podstawie interpolować ciągi znaków, o ile wiem. Próbowałem uciekać to z ukośnikiem, ale to po prostu rozwiązuje problem używania slasha w przekonwertowanym js.

Odpowiedz

15

korzystania z pojedynczego cytaty do wyznaczają kryteria: http://coffeescript.org/#strings

Jeśli chcesz korzystania z pojedynczego cudzysłowu w Twojej ciąg bez konieczności ręcznego ich ucieczce można użyć 3 apostrofy:

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

stwierdzili, że to jest HTML, więc podwójne cudzysłowy są w rzeczywistości bardziej powszechne dla atrybutów niż pojedyncze cudzysłowy. Twój ciąg znaków może być zapisany jako:

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

bez żadnych problemów.

+2

Fuj. Czy to jest najlepsze, co możemy zrobić? Dlaczego podwójne notowania nie działają? –

+0

Bo podwójne cudzysłowy są tym, co powoduje interpolację :) Taka jest różnica między ciągami podwójnymi i jednowartościowymi. Zobacz http://coffeescript.org/#strings – nicolaskruchten

+2

Wciąż fuj. Czy istnieje sposób na uniknięcie całego ciągu, jak C# z @ "some \ string"? –

7

Uciekając z backslashem działa:

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

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

Możemy więc zrobić: str = "\" # {tekst zawijany podwójnymi cudzysłowami} \ "" – YaTaras

Powiązane problemy