相关疑难解决方法(0)

为什么要使用javascript函数包装器(在coffeescript中添加)".call(this)"

当我使用最新的(1.0)咖啡脚本时,一个简单的javascript输出看起来像这样(默认情况下):

(function() {
  var a;
  a = 1;
}).call(this);
Run Code Online (Sandbox Code Playgroud)

是什么.CALL(本)做,哪些是添加它的原因是什么?

javascript coffeescript

31
推荐指数
2
解决办法
6228
查看次数

这种自我调用匿名函数变体背后的原因

在github上查看代码时,我发现了以下内容:

(function() {

}).call(this);
Run Code Online (Sandbox Code Playgroud)

这显然是一个自我调用的匿名函数.但为什么这样写呢?我习惯于看到规范的变体(function() {})().

使用.call(this)自动调用匿名函数有什么特别的优势吗?


编辑:看起来某些commonjs环境this在模块的顶层设置为非全局值.哪些,以及它们this可能想要保留的内容是什么?

javascript module anonymous-function commonjs coffeescript

25
推荐指数
2
解决办法
6089
查看次数

摆脱CoffeeScript的封装包装

如何省略将变量隐藏在全局范围内的自动闭包?

(function() {
  // my compiled code
}).call(this);
Run Code Online (Sandbox Code Playgroud)

只是玩弄CoffeeScript + SproutCore,当然,我更愿意保留原样:在这种情况下,没有必要保护任何东西不被覆盖.

我知道我可以使用@this.在声明,但这不是太优雅.

coffeescript

20
推荐指数
2
解决办法
7863
查看次数

如何在Rails 3.1中为CoffeeScript使用选项"--bare"?

有人知道如何在Rails 3.1中使用此选项?现在CoffeScript .call(this)在每个文件上放置一个函数,但我想删除它.

编辑:" 无法找到变量"错误与Rails 3.1和Coffeescript "和" 模式为CoffeeScript模块 "有我想要的.我将改变我的全局变量以使用@global范围.

ruby-on-rails coffeescript

13
推荐指数
1
解决办法
4661
查看次数

jQuery用Rails/Coffeescript绑定事件?

所以在app/assets/javascript/faye.js.coffee.erb我有以下内容:

$('#room_tag').bind('blur', () ->
   alert('Hey!')
)
Run Code Online (Sandbox Code Playgroud)

其中的所有其他代码如:sendmessage('room', 'message')工作得很好.我可以复制并粘贴从上面的块生成的代码并将其粘贴到Chrome中,它可以正常工作.我认为这是因为,无论是rails还是coffeescript?,无论是其中之一,都将整个文件包装在:

(function() {
  // your generated code here
}).call(this);
Run Code Online (Sandbox Code Playgroud)

还有可能我有办法访问那里定义的方法吗?是否可以在那里定义一个方法而不将其分配给变量?

javascript ruby-on-rails coffeescript

12
推荐指数
1
解决办法
2万
查看次数

QUnit + coffeescript范围

在Javascript污染全局命名空间通常被认为是一件坏事.这就是为什么Coffeescript将所有Javascript (function() {}).call(this);包装在一个包装器中.

但是,我已经开始为我的Coffeescript代码编写QUnit测试,而QUnit抱怨它无法找到我的函数.

1. Died on test #1: getGoodNamePart is not defined
getGoodNamePart is not defined at Object.<anonymous> (file:///Users/kevin/Documents/docs/code/chrome/tests.js:2:10) at Object.run 
Run Code Online (Sandbox Code Playgroud)

我想在不污染全局命名空间的情况下测试变量.这样做的好方法是什么?

这是我要测试的生成的Javascript:

(function() {
getGoodNamePart = function(str) {
    if (str.charAt(0) === '"') {
      str.replace(/" <[^>]+>$"/g, "");
      str.replace(/"/g, "");
      return str;
    } else if (str.charAt(0) === '<') {
      str.replace(/<|>/g, "");
      return str;
    } else {
      return str;
    }
  };
}).call(this);
Run Code Online (Sandbox Code Playgroud)

我的test.js文件是:

test('getGoodNamePart()', function() {
  equals(getGoodNamePart("\"Kev Burke\" <kev@inburke.com>"), "Kev Burke", "\"name\" <email> works");
  equals(getGoodNamePart("", "", "empty string works"));
  equals(getGoodNamePart("kev@inburke.com", …
Run Code Online (Sandbox Code Playgroud)

qunit coffeescript

6
推荐指数
1
解决办法
821
查看次数

controller.js.coffee中的函数

我在使用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)

ruby-on-rails coffeescript ruby-on-rails-3.1

4
推荐指数
1
解决办法
2924
查看次数