Выполнение класса CoffeeScript для document.ready - PullRequest
20 голосов
/ 12 января 2011

у меня

class Main
   test:->
      alert "yay!"

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

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

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

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

ТНХ!

Ответы [ 4 ]

26 голосов
/ 16 ноября 2011

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

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

То, что делает, - это запускает jQuery (function () {callback ...}), как в 3-м разделе этогоссылка: http://api.jquery.com/jQuery/

Что в основном говорит об этом:

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

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

Надеюсь, это поможет!

24 голосов
/ 12 января 2011

class Main

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

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

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

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

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

9 голосов
/ 06 февраля 2011

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);
0 голосов
/ 01 октября 2012

Я тоже сталкивался с этой проблемой раньше.Прежде всего, поскольку вы определяете класс, вам нужно создать его экземпляр.Затем вы можете вызвать функцию 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...