我在使用 CoffeeScript 创建函数时遇到一些问题,我想我错过了一些东西。对于我的用户控制器,我想为注册表单创建客户端验证。我认为我错过了这一切如何运作的一些基本内容。
<%= form_for @user, :html => {:onsubmit => "return validate_signup_form();"} do |f| %>
咖啡脚本(资产/users.js.coffee):
validate_signup_form = () ->
alert "Hi"
return false
预期输出:
var validate_signup_form;
validate_signup_form = function() {
alert("Hi");
return false;
};
validate_signup_form();
实际输出:
(function() {
var validate_signup_form;
validate_signup_form = function() {
alert("Hi");
return false;
};
}).call(this);
事实上,一切都按照预期进行。正如你所读到的here http://jashkenas.github.com/coffee-script/#lexical_scope,Coffeescript 将您的代码包装在匿名函数中,以防止全局命名空间的污染。如果您只看一下示例,您可能会错过这一点,但文档明确指出:
虽然压抑在这
为了清晰起见,所有文档
CoffeeScript 输出被包装在
匿名函数:(function(){ ...
})();该安全包装结合了
随着自动生成
var 关键字,使其变得非常
很难污染全球
命名空间意外。
为了访问在此人工作用域内声明的对象、变量或方法,您需要使其在全局作用域内显式可用,例如像这样:
window.validate_signup_form = validate_signup_form
在您提到的情况下,我肯定会使用事件来触发该方法。
顺便说一句:方法声明中不需要空括号foo =->
工作得很好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)