Я начал писать coffeescript на прошлой неделе, так как я программирую новый сайт Play20, где coffeescript является стандартом. Я хочу обновить функцию getData в моем классе каждые 5 минут, но функция setInterval не привязывается к моему классу. Только в первый раз, когда он вызывает getData, потому что объект «this» все еще доступен, поскольку функция setUpdateInterval() вызывается из конструктора.Coffeescript setInterval в классе
Но после первого вызова setInterval больше не имеет никакого соединения с экземпляром Widget и не знает, что такое функция this.getData() (и как его достичь).
Кто-нибудь знает, как это сделать?
Вот мой код:
class Widget
constructor: (@name) ->
this.setUpdateInterval()
getData: ->
console.log "get Data by Ajax"
setUpdateInterval: (widget) ->
setInterval(this.getData(), 3000000)
вы можете сделать привязку вызова, как 'центибар = @ getData.bind @', и вы также не нужны скобки на 'setInterval' линии ... подробнее кофе. +1, мне может понравиться этот ответ лучше моего, за исключением того, что он не будет работать в IE. – hvgotcodes
Спасибо, код делает именно то, что я хотел сделать (в Chrome)! Одна вещь «callback = -> that.getData.call (that)», похоже, не компилируется. Следующий вопрос, ограничивая различие, вы имеете в виду, что мне нужны два привязки, один для всех браузеров, кроме IE и один специальный для IE, или мне нужно только последнее связывание? – Jacob
@ пользователь1353536 компилируется здесь. – Reactormonk