Coffeescript:添加一个由布尔值控制的条件类名

时间:2016-03-18 10:18:24

标签: javascript ruby-on-rails-4 coffeescript react-rails

我正在尝试使用以下方法向反应中的元素添加类名:

className: "btn btn-primary #{!@valid() ? 'disabled' : ''}"

然而,这导致class="btn btn-primary true"

此咖啡代码编译为错误的JS,如下所示:

className: "btn btn-primary " + ((ref = !this.valid()) != null ? ref : {
          'disabled': ''
        }),

在咖啡中这样做的正确语法是什么?

1 个答案:

答案 0 :(得分:2)

CoffeeScript没有C风格的?:三元组,因此:

!@valid() ? 'disabled' : ''

被解析为:

!@valid() ? ({ 'disabled' : '' })

这是existential operator

  

存在运算符

     

检查JavaScript中是否存在变量有点困难。 if (variable) ...接近,但是为零,空字符串和false都失败。 CoffeeScript的存在运算符?返回true,除非变量是 null undefined ,这使得它类似于Ruby {{1} }

与对象文字相结合。因此,你看到了奇怪的JavaScript。

CoffeeScript使用if expressions代替nil?

  

CoffeeScript可以将 if 语句编译成JavaScript表达式,尽可能使用三元运算符,否则使用闭包。 CoffeeScript中没有明确的三元语句 - 您只需在一行上使用常规 if 语句。

如果你在JavaScript中这样说:

?:

然后你在CoffeeScript中这样说:

!this.valid() ? 'disabled' : ''

,因为if !@valid() then 'disabled' else '' 使用表达式:

"#{...}"