Здесь есть пара проблем.Во-первых, вы, похоже, предполагаете, что @
/ this
является глобальным объектом (window
) из обратного вызова jQuery.Но легко понять, что это не так:
jQuery -> console.log @ is window # false
Помните, что обратные вызовы могут вызываться в любом контексте, который хочет библиотека.В этом случае @
равно document
.И document.toggleEmailOptions
не существует.
Кроме того, если вы хотите, чтобы toggleEmailOptions
был глобальным, вам необходимо прикрепить его к window
(или @
/ this
, поскольку @ is window
в самой внешней области вашего файла).Это потому, что когда вы просто пишете toggleEmailOptions = ...
, CoffeeScript устанавливает его в файл с помощью объявления var
.Это легко увидеть, посмотрев на скомпилированные JS: var
s всегда находятся на вершине своей области видимости.К счастью, область файла - это то, что вы хотели в любом случае.
Так что в основном: не думайте об этом!То, что вы хотите:
jQuery ->
$('#emailTypes').change ->
toggleEmailOptions()
и оставьте все как есть.