CoffeeScript не имеет С-стиль ?:
тройных так что:
[email protected]() ? 'disabled' : ''
распознаются как:
[email protected]() ? ({ 'disabled' : '' })
который является existential operator:
Экзистенциальный Оператор
Немного сложно проверить наличие переменной в JavaScript. if (variable)
... близок, но не выполняется нуль, пустая строка и ложь. экзистенциальный оператор CoffeeScript в ?
возвращает истину, если переменная не является нулевой или неопределенными, что делает его аналогом nil?
Руби в сочетании с литерала объекта. Отсюда и странный JavaScript-код, который вы видите.
CoffeeScript использует if
expressions вместо ?:
:
CoffeeScript может составить если таковые заявления в выражение JavaScript, используя тройной оператор, когда это возможно, и закрывающую упаковку в противном случае. В CoffeeScript нет явного трёхмерного выражения - вы просто используете обычный оператор , если в одной строке.
Если вы хотите сказать, что это в JavaScript:
!this.valid() ? 'disabled' : ''
, то вы бы сказать, что это в CoffeeScript:
if [email protected]() then 'disabled' else ''
и так "#{...}"
работ с выражением:
className: "btn btn-primary #{if @valid() then 'disabled' else ''}"
У CoffeeScript нет '? : 'ternary, он использует' if x, а затем y else z'. Я не знаю контекста достаточно хорошо, но у вас могут быть проблемы с тем, что '@' при построении этой строки тоже. –
Да, это полностью работает. Можете ли вы разместить это как ответ :) – vipin8169