我正在尝试使用以下方法向反应中的元素添加类名:
className: "btn btn-primary #{!@valid() ? 'disabled' : ''}"
然而,这导致class="btn btn-primary true"
此咖啡代码编译为错误的JS,如下所示:
className: "btn btn-primary " + ((ref = !this.valid()) != null ? ref : {
'disabled': ''
}),
在咖啡中这样做的正确语法是什么?
答案 0 :(得分:2)
CoffeeScript没有C风格的?:
三元组,因此:
!@valid() ? 'disabled' : ''
被解析为:
!@valid() ? ({ 'disabled' : '' })
存在运算符
检查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 ''
使用表达式:
"#{...}"