Класс coffeescript недоступен в основном javascript
У меня есть класс, написанный в coffeescript, например,
class Example
constructor: ->
$.each [1, 2, 3], (key, value) =>
@test = value
return @test
render: ->
alert @test
и я имею этот класс как отдельный файл, Example.coffee
Теперь я хочу иметь возможность создавать экземпляр в моем основном файле javascript, например:
d = new Example
d.render()
но класс undefined, даже если он включен как script на странице, например
<script src="Example.js></script>
<script src="main.js"></script>
Как сделать класс общедоступным для основного файла?
Ответы
Ответ 1
Вы можете объявить свой класс доступным по всему миру (по крайней мере для браузеров), объявив его в пространстве имен window
:
class window.Example
constructor: ->
$.each [1, 2, 3], (key, value) =>
@test = value
return @test
render: ->
alert @test
Это положит Example
прямо в window
. Вы также можете сказать class @Example
в большинстве случаев.
По умолчанию CoffeeScript обертывает каждый файл в обертке (function() { ... })()
, чтобы предотвратить загрязнение пространства имен. Это можно предотвратить, предоставив -b
при компиляции вашего CoffeeScript:
-b, --bare
Скомпилируйте JavaScript без оболочки безопасности верхнего уровня.
но это может быть не вариант для вас (или он может быть уродливым). Обычный подход заключается в том, чтобы объявить конкретное пространство приложений где-то до загрузки ваших классов:
// Probably in a <script> in your top-level HTML...
App = { };
а затем соответствующим образом просуммируйте ваши классы:
class App.Example
#...
Затем обратитесь ко всему через пространство имен App
.
Ответ 2
Я знаю, что это старый поток, но если кто-то найдет его полезным, объявите свой класс с помощью "@", и он будет доступен для файлов .js
вне файла .coffee
.
Итак, в example.coffee
:
class Introverted
honk: ->
alert "This class is visible within the .coffee file but not outside"
class @Extroverted
honk: ->
alert "This class is visible inside and outside of the .coffee file"
Это скомпилировано в example.js
, которое затем можно использовать в example.html
:
<script src="example.js"></script>
<script>
var p = new Extroverted(); // works fine
p.honk();
var i = new Introverted(); // will fail with "Introverted is not defined"
i.honk();
</script>
Ответ 3
Создать глобальную переменную
window.Example = Example