【问题标题】:How to escape string interpolation in Coffeescript如何在 Coffeescript 中转义字符串插值
【发布时间】:2012-01-26 08:31:37
【问题描述】:

我正在尝试使用 jQuery UI 选项卡示例中的这部分代码并将其转换为 Coffeescript。我已经通过很棒的http://js2coffee.org/ 工具运行它。

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;

问题在于tabTemplate 变量声明。据我所知,Coffeescript 正在尝试对其进行字符串插值。我试过用斜杠转义它,但这只是解决在转换后的 js 中使用斜杠。

【问题讨论】:

    标签: javascript coffeescript


    【解决方案1】:

    使用单引号分隔您的字符串:http://coffeescript.org/#strings

    如果您想在字符串中使用单引号而不手动转义它们,您可以使用 3 个单引号:

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

    也就是说,这是 HTML,所以双引号实际上比单引号更常见于属性。因此,您的字符串可以写成:

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

    没有任何问题。

    【讨论】:

    • 呸。这是我们能做的最好的吗?为什么双引号不起作用?
    • 因为双引号字符串是导致插值的原因:) 这就是双引号字符串和单引号字符串之间的区别。见coffeescript.org/#strings
    • 还是很糟糕。有什么方法可以转义整个字符串,就像 C# 对 @"some\string" 所做的那样?
    • 是的,这就是三单引号的作用:)
    • 哦。从 CoffeeScript 文档中并不清楚三单引号(令人难以置信)是这种工作方式。无论如何,我根据您的第二个想法赞成您的回答。
    【解决方案2】:

    用反斜杠转义确实有效:

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

    【讨论】:

    • 所以,我们可以这样做:str = " \"#{用双引号括起来的文本}\""
    猜你喜欢
    • 2010-11-21
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 2015-09-28
    相关资源
    最近更新 更多