我有
class Main
test:->
alert "yay!"
在coffeescript中,我想在我的index.html
中运行它<script>
$(function(){
//and obv Main.test(); doesn't work
});
</script>
网站上有这样的说明,它表示无效。但我找不到如何使它工作。有任何想法吗?我需要找出什么是coffeescript封装包装。
或coffeescript是否在document.ready之后执行?
THX!
答案 0 :(得分:26)
要在document.ready之后执行Coffeescript,你可以像这样使用jQuery:
$ ->
# Put your function code here
init()
正在做的是运行jQuery(function(){callback ...}),就像这个链接的第3部分一样: http://api.jquery.com/jQuery/
基本上这样说:
jQuery(callback)返回:jQuery 描述:绑定DOM完成加载时要执行的函数。
我在文档之外声明我的所有类等,然后调用init函数以使其在适当的时间运行。
我希望有所帮助!
答案 1 :(得分:24)
class Main
请尝试class @Main
。
obv Main.test();不起作用
右。应为new Main().test()
或Main::test()
。
coffeescript会在document.ready之后执行吗?
假设你是通过extras/coffee-script.js并使用jQuery执行它,是的。
答案 2 :(得分:9)
Coffeescript将您的代码包装在一个函数调用中,这样您就不会意外地覆盖全局变量。
如果您希望任何变量,函数或类是全局的(因此可以被其他文件访问),您需要通过将它们附加到this
或window
来明确地将它们全局化。 / p>
# 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);
答案 3 :(得分:0)
我之前也遇到过这个问题。首先,由于您要定义一个类,因此需要实例化它。然后你可以在实例上调用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