Проблема доступа к функции, определенной в Coffeescript - PullRequest
3 голосов
/ 20 февраля 2011

Я конвертирую некоторый javascript в coffeescript, и у меня возникают проблемы с доступом к определенной мной функции.Вот оригинальный рабочий javascript (я также использую jQuery):

function check_quiz_state(){
  var div = $('#quiz-waiting');
  var timestamp = new Date().getTime();

  $.ajax({
    url: window.location.pathname + "?time=" + timestamp,
    success: function(state) {
      if (state == 'created' || state == 'completed') {
        setTimeout("check_quiz_state()", 3000);
      }
      else if (state == 'built') {
        div.html("<a href='" + window.location.pathname + "/pages/1'>Click to begin!</a>");
      }
      else if (state == 'graded') {
        window.location.pathname = window.location.pathname + "/review"
      }
    }
  });
};

После некоторой очистки и свободного использования ключа удаления вот мой код:

check_quiz_state = ->
  success = (state) ->
    switch state
      when 'created', 'completed' then setTimeout "check_quiz_state()", 3000
      when 'built' then $('#quiz-waiting').html "<a href='#{window.location.pathname}/pages/1'>Click to begin!</a>"
      when 'graded' then window.location.pathname = window.location.pathname + "/review"

  $.ajax {url: "#{window.location.pathname}?time=#{Date.now()}"}, success

Проблема в том,с использованием setTimeout для повторения функции - это прекрасно работает в оригинальном javascript, но с coffeescript - нет.Я думаю, что он не может найти функцию check_quiz_state - если я использую консоль javascript в Chrome, я могу нормально запустить функцию с моим исходным javascript, но с версией coffeescript я получаю ошибку: «ReferenceError: check_quiz_state не определен».1007 *

Что мне делать по-другому?

Правка - Вот что выводит coffeescript.Извините, я заблудился:

(function() {
  var check_quiz_state;
  $(function() {
    // Other application code I omitted above, which is calling check_quiz_state() successfully.
  });
  check_quiz_state = function() {
    var success;
    success = function(state) {
      switch (state) {
        case 'created':
        case 'completed':
          return setTimeout("check_quiz_state()", 3000);
        case 'built':
          return $('#quiz-waiting').html("<a href='" + window.location.pathname + "/pages/1'>Click to begin!</a>");
        case 'graded':
          return window.location.pathname = window.location.pathname + "/review";
      }
    };
    return $.ajax({
      url: "" + window.location.pathname + "?time=" + (Date.now())
    }, success);
  };
}).call(this);

Полагаю, функция, в которую он включен, объясняет, почему я не могу вызвать ее из консоли разработчика Chrome, но не понимаю, почему истекает время ожидания.Хотя я не очень хорош в JavaScript.

1 Ответ

2 голосов
/ 20 февраля 2011

D'о.Глупая ошибка.Я испортил вызов ajax, когда переводил из javascript в coffeescript.

$.ajax {url: "#{window.location.pathname}?time=#{Date.now()}"}, success

Должно быть:

$.ajax {url: "#{window.location.pathname}?time=#{Date.now()}", success: success}

Извините, все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...