相关疑难解决方法(0)

CoffeeScript模块的模式

在Github上查看CoffeeScript源代码时,我注意到大多数(如果不是全部)模块定义如下:

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

这种模式看起来像是将整个模块包装在匿名函数中并调用自身.

这种方法的优点和缺点是什么?还有其他方法可以实现相同的目标吗?

javascript node.js coffeescript

29
推荐指数
2
解决办法
9662
查看次数

使用Rails 3.1和Coffeescript"找不到变量"错误

我的应用程序中有一些视图,它引用了我的application.js文件,其中包含我在整个应用程序中使用的函数.

在使用3.1的边缘版本之后,我刚刚安装了Rails 3.1版本候选版本.直到我安装RC我没有任何问题,但现在我收到此错误:

ReferenceError:找不到变量:indicator_tag

indicator_tag是我在application.js中定义的函数.我在javascript文件中注意到的唯一区别是现在我的所有函数都包含在:

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

我理解这是针对变量范围的吗?但它可能阻止我的页面使用这些变量吗?在有人要求之前,我确保我的include标签中的javascript路径是正确的.

javascript ruby-on-rails coffeescript

22
推荐指数
2
解决办法
5771
查看次数

如何将CoffeeScript文件与视图相关联?

刚刚安装了rails 3.1 rc1,我试图用新资产管道来管理javascript的最佳方法默认情况下,所有coffeescript都被编译成一个application.js文件,这是一件好事.

每个单独的咖啡脚本文件都附加到js文件并包装在一个匿名函数中,该函数通过调用方法执行.常见的场景是使用一些jquery将各种表单转换为ajax表单,更新UI等...

这些脚本中的许多都是特定于控制器或动作的,我试图用"常规"方式来处理这个,因为所有内容都包含在一个匿名函数中,我如何只执行特定控制器/动作的代码,默认情况下,正在执行所有匿名函数

我确实玩了一些hacks,我将控制器和动作名称加载到js变量中,然后在coffeescript中检查那些有条件地运行代码,我不是很喜欢

我最初的想法是每个咖啡文件都包含一个js命名空间/对象,我会从视图中调用特定的那些,使用default_bare = true配置来调用它

请参阅如何在Rails 3.1 for CoffeeScript中使用选项"--bare"?

编辑

再看一些:看起来这可能是正确的方法 - 使用Rails 3.1和Coffeescript"找不到变量"错误

coffeescript ruby-on-rails-3.1

16
推荐指数
1
解决办法
3445
查看次数

从控制台调用coffeescript函数

用coffeescript和Rails 3.1.0.rc4玩一点.有这个代码:

yourMom = (location) ->
  console.log location

yourMom "wuz hur"
Run Code Online (Sandbox Code Playgroud)

页面加载时,会正确输出"wuz hur".但是当我试着打电话的时候

yourMom("wuz hur")
Run Code Online (Sandbox Code Playgroud)

从chrome js控制台(我有时会测试普通的JS函数),我得到一个"ReferenceError:yourMom未定义"

coffeescript生成的函数是否以这种方式提供?

javascript coffeescript ruby-on-rails-3.1

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

Coffescript如何从其他资产访问功能?

所以我有两个控制器,hotelsvideos.我希望hotels.js.coffee能够访问创建的函数,videos.js.coffee但我得到一个"未定义"错误.

我是CoffeeScript的新手,所以任何线索都会受到赞赏.

coffeescript

5
推荐指数
3
解决办法
4599
查看次数

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
查看次数

为什么Rails 3.1/Sprockets 2/CoffeeScript添加了额外的代码?

使用Rails 3.1(rc5),我注意到我包含rails(或sprockets)的任何coffeescript文件正在添加初始化javascript的顶部和底部.换句话说,一个空白的.js.coffee文件输出如下:

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

这很烦人,因为它搞砸了我的javascript范围(除非我真的不知道我在做什么).我通常将我的所有javascript类分成单独的文件,我相信将这些函数代码包装成我的类只会使它们彼此超出范围.或者,至少,我似乎无法访问它们,因为我不断得到未定义的错误.

有没有办法覆盖这个?似乎sprockets中的这个文件与添加这段代码有关:https: //github.com/sstephenson/sprockets/blob/master/lib/sprockets/jst_processor.rb

我知道将函数中的所有内容包装起来似乎是一种额外的便利,因为在加载DOM之前没有任何东西可以运行,但据我所知,它只是弄乱了我的范围.

coffeescript ruby-on-rails-3.1 sprockets

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

如何封装Coffeescript

我不知道所有coffeescript编译器是否将其脚本包装在匿名函数中,但这就是我看到Rails所做的.如何禁用此封装?

我想在一个coffeescript文件中放入几个初始化函数,然后从页面<script>标签中调用其中一个(这样每个页面调用一个不同的初始化程序).如果封装了初始化函数,则不能这样做.

Coffeescript初始化函数:

initializerA = -> console.log 'foo'
initializerB = -> console.log 'bar'
Run Code Online (Sandbox Code Playgroud)

页面代码:

<script>$(document).ready(initializerA)</script>
Run Code Online (Sandbox Code Playgroud)

系统:coffee-rails 3.2.1,Rails 3.2.3,Ruby 1.9.3

encapsulation coffeescript ruby-on-rails-3

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