Coffeescript упаковка файлов в функцию - PullRequest
8 голосов
/ 16 августа 2011

Компилятор coffeescript по какой-то причине оборачивает все мои файлы .coffee в функцию, когда они компилируются. Например, если у меня есть test.coffee:

class TestClass
    constructor: (@value) ->

    printValue: () ->
        alert(@value)

printAValue = () -> 
    test = new TestClass()
    test.printValue()

тогда я получаю test.js:

(function() {
  var TestClass, printAValue;
  TestClass = (function() {
    function TestClass(value) {
      this.value = value;
    }
    TestClass.prototype.printValue = function() {
      return alert(this.value);
    };
    return TestClass;
  })();
  printAValue = function() {
    var test;
    test = new TestClass();
    return test.printValue();
  };
}).call(this);

Мой простой HTML-файл не будет работать с этим:

<html>
    <head>
        <script src="test.js"></script>
    </head>
    <body onload="printAValue()">
    </body>
</html>

Я не работал с большим количеством JS раньше, и я не сомневался бы в компиляторе кофе, но как он должен работать? Как

Ответы [ 2 ]

9 голосов
/ 16 августа 2011

См. мой ответ здесь о совместном использовании jS-кода между файлами / модулями. Кроме того, к вашему сведению функция-обертка предназначена для предотвращения непреднамеренных глобальных переменных. Вы можете отключить с помощью передачи --bare инструменту командной строки компилятора кофе, но это хорошая практика с веской причиной.

7 голосов
/ 16 августа 2011

Никогда не добавляйте прослушиватели событий в HTML. Добавьте их в свой JavaScript, предпочтительно в ту же область, в которой вы определяете обработчик событий.

printAValue = () -> 
    test = new TestClass()
    test.printValue()

document.body.addEventListener('load', printAValue, false)

Если вам абсолютно необходимо экспортировать что-либо в глобальную область, экспортируйте в объект окна:

window.printAValue = () -> 
    test = new TestClass()
    test.printValue()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...