[英]Calling functions defined with coffee script?
我有以下coffeescript代码来生成和警告框:
show_alert = () ->
alert("Hello! I am an alert box!")
编译为:
(function() {
var show_alert;
show_alert = function() {
return alert("Hello! I am an alert box!");
};
}).call(this);
在我的HTML中我有以下内容
<input onclick='show_alert()' type='button' value='Show alert box' />
但是,没有显示警告框? 以下是从浏览器复制的html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Test Rails Application</title>
<style type='text/css'>.application h1 {
color: lime; }
</style>
<script type='text/javascript'>(function() {
var show_alert;
show_alert = function() {
return alert("Hello! I am an alert box!");
};
}).call(this);
</script>
</head>
<body>
<h1>Hello from applicaiton.html.haml</h1>
<div class='application'><h1>Hello World</h1>
<input onclick='show_alert()' type='button' value='Show alert box' />
</div>
</body>
</html>
为什么我无法显示警报框?
您的问题是生成的JavaScript代码在另一个范围内。 您必须通过将-b
参数添加到coffeescript编译器或通过显式导出函数来解决此问题
root = exports ? this
root.show_alert = () -> alert("Hello! I am an alert box!")
有关导出和范围问题的更多信息, 请查看https://stackoverflow.com/a/4215132/832273
我用上面的coffeescript代码创建了一个有效的jsfiddle
我找到了两种方法来解决这个问题FIRST在函数名之前添加@
@say_hi = () ->
$(alert('Hello!!!'))
在咖啡文件末尾添加第二个
window["say_hi"] = say_hi
在你的coffeescrpt代码中,尝试将该函数保存到window: window["show_alert"] = show_alert
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.