Подтвердить что ты не робот

Запуск класса CoffeeScript на document.ready

У меня есть

class Main
   test:->
      alert "yay!"

в coffeescript, и я хочу запустить это внутри моего index.html

<script>
    $(function(){
        //and obv Main.test(); doesn't work
    });
</script>

есть примечание об этом на веб-сайте, он говорит, что это не сработает. Но я не мог найти, как заставить его работать. есть идеи? мне нужно выяснить, какая оболочка закрытия coffeescript.

или выполняет coffeescript после document.ready в любом случае?

ТНХ!

4b9b3361

Ответ 1

class Main

Попробуйте class @Main.

obv Main.test(); не работает

Right. Должно быть new Main().test() или Main::test().

выполняет ли coffeescript после document.ready в любом случае?

Предполагая, что вы выполняете его с помощью extras/coffee-script.js и используя jQuery, да.

Ответ 2

Чтобы выполнить Coffeescript после document.ready, вы можете использовать jQuery следующим образом:

$ ->
  # Put your function code here
  init()

Что это такое, работает jQuery (function() {callback...}), как 3-й раздел по этой ссылке: http://api.jquery.com/jQuery/

В основном это сказано:

jQuery (обратный вызов) Возвраты: jQuery Описание: Привязывается функция, выполняемая при завершении загрузки DOM.

Я объявляю все свои классы и т.д. за пределами документа готовым, а затем вызываю функцию init, чтобы запустить ее в соответствующее время.

Я надеюсь, что это поможет!

Ответ 3

Coffeescript завершает ваш код в вызове функции, поэтому вы не можете случайно перезаписать глобальные переменные.

Если вы хотите, чтобы любые переменные, функции или классы были глобальными (к ним могут обращаться другие файлы), вам необходимо явно сделать их глобальными, присоединив их к this или window.

# Stays within the function scope, so you can't access it outside the file
myNotGlobalFunction -> return

# Attaches it to `this` aka `window`, so can be accessed globally
this.myGlobalFunction -> return

# A shortcut using @ which is an alias to `this.`
@myOtherGlobalFunction -> return

Скомпилируется для:

(function() {
  myNotGlobalFunction(function() {
    return;
  });
  this.myGlobalFunction(function() {
    return;
  });
  this.myOtherGlobalFunction(function() {
    return;
  });
}).call(this);

Ответ 4

Я столкнулся с этой проблемой и раньше. Прежде всего, поскольку вы определяете класс, вам необходимо создать его экземпляр. Затем вы можете вызвать функцию test в экземпляре:

<script>
    $(function(){
        var an_instance_of_main = new Main();
        an_instance_of_main.test();
    });
</script>

Однако вы могли заметить, что браузер не может найти ваш класс Main. Это связано с тем, что, когда CoffeeScript скомпилирован, он обертывает функцию самоисполнения вокруг вашего определения класса, чтобы предотвратить Main от доступности на глобальном уровне. Если вы хотите сделать его доступным по всему миру, вы можете прикрепить его к окну:

class window.Main
   test:->
      alert "yay!"

или назначьте его после его определения:

class Main
   test:->
      alert "yay!"

window.Main = Main