Проблемы с вызовом функции JQuery slideUp из CoffeeScript - PullRequest
0 голосов
/ 08 августа 2011

Я пытаюсь преобразовать следующий фрагмент JS в CoffeeScript:

$(document).ready(function(){
  window.setTimeout(function(){
    $('#flash').slideUp('slow', function(){
      $(this).remove();
    })
  }, 1000)
})

Я пробовал это:

$(document).ready ->
  window.setTimeout ->
    $('#flash').slideUp 'slow', (-> $(this).remove()), 1000

, что приводит к следующему коду JS:

(function() {
  $(document).ready(function() {
    return window.setTimeout(function() {
      return $('#flash').slideUp('slow', (function() {
        return $(this).remove();
      }), 1000);
    });
  });
}).call(this);

Выглядит довольно похоже на меня, но это просто не работает.Цель этого фрагмента состоит в том, чтобы сделать анимацию slideUp для элемента div с идентификатором #flash и удалить элемент после завершения анимации.Чистый JS Snippet работает отлично, но я не понимаю, почему скомпилированный CS не выполняет свою работу

У меня совсем нет опыта работы с JavaScript или CoffeeScript, поэтому я был бы очень рад, если бы намекнулздесь.

1 Ответ

3 голосов
/ 08 августа 2011

Ваш оригинальный код эквивалентен CoffeeScript

$(document).ready ->
  window.setTimeout (->
    $('#flash').slideUp 'slow', (-> $(this).remove())
  ), 1000

Вместо этого вы сделали 1000 третьим аргументом функции slideUp. Поскольку setTimeout требует аргумента времени, ничего не происходит.

Обратите внимание, что мне нравится делать функцию-оболочку вокруг setTimeout, которая меняет два аргумента для удобства чтения:

window.delay = (ms, func) -> setTimeout func, ms

Как только это определено, вы можете написать

$(document).ready ->
  delay 1000, -> $('#flash').slideUp 'slow', (-> $(this).remove())
...