2017-02-09 7 views
1

оцените, если вы поможете. У меня есть простая функция для отображения (или скрытия) элементов по одному, и она написана в CoffeeScript. Функция работает, но мой Chrome выдает это сообщение в консолиCoffeeScript - функция runnning, но она «не является функцией»

"Uncaught TypeError: elemRoll(...) is not a function"

  • , что я делаю неправильно?

elemRoll = (elemName, delayDuration, animationDuration) -> 
 
    \t \t amount = $(elemName).length 
 
    \t \t $(elemName).each (amount) -> 
 
    \t \t \t $(this).delay(delayDuration * amount).animate { 'opacity': 1 }, animationDuration 
 

 
$(document).ready -> 
 
    \t do elemRoll '.epoch-container .epoch-item', 190, 160

ответ

2

Вам не нужно do просто вызвать функцию и редко вы хотите использовать do для этой цели. Ваш готовый обработчик должен быть просто:

$(document).ready -> 
    elemRoll '.epoch-container .epoch-item', 190, 160 
    # No `do` in here 

CoffeeScript's do предназначен немедленно выполнить анонимную функцию:

CoffeeScript provides the do keyword, which immediately invokes a passed function, forwarding any arguments.

Обычно он используется в качестве тела цикла, когда вам нужно закрывающие оберток:

for e in array 
    do (e) -> ... 

Вы также можете использовать его для выполнения анонимной функции вне цикла:

do (a) -> ... 

становится этот JavaScript:

(function(a) { /* ... */ })(a); 

Вы также можете использовать его, чтобы выполнить аргумент менее функции без скобок так do f становится f().

Ваша проблема заключается в том, что это:

do a b 

интерпретируется как

do a(b) 

который становится этот JavaScript:

a(b)(); 

так ваш:

do elemRoll '.epoch-container .epoch-item', 190, 160 

такая же, как написание:

f = elemRoll '.epoch-container .epoch-item', 190, 160 
do f 

и CoffeeScript при условии, что elemRoll '.epoch-container .epoch-item', 190, 160 будет возврата функции.

Кроме того, вам необходимо быть очень осторожными и соответствовать вашим пробелам или очень запутывающие вещи могут случиться.

 Смежные вопросы

  • Нет связанных вопросов^_^