Emi*_*äck 4 ruby-on-rails coffeescript ruby-on-rails-3.1
我在使用CoffeeScript创建函数时遇到了一些麻烦,我想我错过了一些东西.对于我的用户控制器,我想为注册表单创建客户端验证.我想我已经错过了这一切如何运作的基本原则.
<%= form_for @user, :html => {:onsubmit => "return validate_signup_form();"} do |f| %>
Run Code Online (Sandbox Code Playgroud)
CoffeeScript(assets/users.js.coffee):
validate_signup_form = () ->
alert "Hi"
return false
Run Code Online (Sandbox Code Playgroud)
预期产量:
var validate_signup_form;
validate_signup_form = function() {
alert("Hi");
return false;
};
validate_signup_form();
Run Code Online (Sandbox Code Playgroud)
实际输出:
(function() {
var validate_signup_form;
validate_signup_form = function() {
alert("Hi");
return false;
};
}).call(this);
Run Code Online (Sandbox Code Playgroud)
实际上一切都按照预期的方式工作.正如您可以在这里阅读的那样,Coffeescript将您的代码包装在一个匿名函数中,以防止污染全局命名空间.如果你只是看一下这些例子,你可能会错过这个,但文档明确指出:
虽然为了清楚起见在本文档中进行了抑制,但所有CoffeeScript输出都包含在一个匿名函数中:(function(){...})(); 这个安全包装器与var关键字的自动生成相结合,使得非常难以意外地污染全局命名空间.
为了访问在此仿真范围内声明的对象,变量或方法,您需要使其在全局范围内显式可用,例如:
window.validate_signup_form = validate_signup_form
Run Code Online (Sandbox Code Playgroud)
如果您提到我肯定会使用事件来触发该方法.
顺便说一句:你的方法声明中不需要空括号foo =->
就可以了.
归档时间: |
|
查看次数: |
2924 次 |
最近记录: |