2013-12-25 3 views
1

Я пытаюсь реализовать код от this SO question в coffeescript.Использование закрытия в coffeescript

Это то, что у меня есть, но оно не работает.

class SomeClass 

    initialize: -> 

     target = view.$('#finder') 

     typewatch = do -> 
     timer = 0; 
     (callback, ms) -> 
      clearTimeout timer 
      timer = setTimeout callback, ms 

     target.keyup => 
     typewatch @someMethod(target.val()), 1000 


    someMethod: (arg) -> 
     // do something 

someMethod вызывается без каких-либо задержек. Похоже, что setTimeout вообще не называется.

+2

Попробуйте 'timer = setTimeout callback, 1000' – elclanrs

+0

@elclanrs: Это имеет большой смысл, и я обновляю код соответствующим образом, но моя проблема сохраняется. – niftygrifty

ответ

1

@someMethod() грамматика действительно вызывает метод немедленно.

Если вы хотите «сохранить» вызов метода (грубо, метод + this + аргументы) в переменной и называть его позже, используйте Function.prototype.bind. например typewatch @someMethod.bind(@, target.val()), 1000

BTW как упомянутые выше elclanrs, часть setTimeout (->callback) не будет выполнять обратный вызов.

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