2012-03-18 90 views
0

我在我的Rails 3.2应用程序中包含Javascript与<%= javascript_include_tag "application" %>。而且,我已经包含在被包含在最终的application.js文件company.js.coffee文件下面的CoffeeScript运行时:Rails 3 Javascript Not Working

$("article h2 a").click (e) -> 
    $("article div").hide() 
    $(@hash).slideToggle() 
    e.preventDefault() 
$("article div:not(#1)").hide() 

然而,脚本不能在所有的工作,尽管在功能它是从原始HTML文件复制而来的(尽管不在CoffeeScript中)。而且,类似地,AJAX表单请求似乎也不工作。

有谁知道为什么会发生这种情况?有什么我失踪?

+0

您的开发控制台中的任何错误?尝试在该处投掷警报(“是的,它正在工作”)。 – 2012-03-18 22:53:17

+0

我只知道你可以在那里运行传统的rails命令。但是,我试着从字面上添加一个JS警报,并且抛出了一个没有方法的错误。这是你的意思吗?对不起,我是一名PHP程序员,而且是Rails(尤其是3.2)的新手。 – Justin 2012-03-18 22:59:28

+0

对不起,你的意思是你的CofeeScript文件:-) – 2012-03-18 23:01:54

回答

3

我终于找到了答案(我应该首先尝试的东西)。当我将其他文件包含在资产文件夹中时,我认为rails自动将$ ->开启器包含在application.js文件中。但似乎你需要为每一个做。所以,我刚刚在一切之前加上了$ ->,现在它已经可以工作了。

并且为其他人阅读相同问题的说明,请确保$选择器未被任何其他函数使用,否则您需要执行完整的CoffeeScript JQuery函数参考。

感谢您的帮助!

0

如果article表示元素ID或类,则需要用.article#article来选择它。我一直都忘记。

+0

我只是用它来选择一般的HTML5文章标签,但让我尝试添加一个类或ID,看看现在是否适用... – Justin 2012-03-19 00:52:14

+0

不,同样的问题,当我从文章改为#article时CoffeeScript并在HTML中进行了更改。 – Justin 2012-03-19 00:59:54

+1

是通过ajax加载的这些元素中的任何一个?如果是这样,你需要使用.on(“$(”article h2 a“)。on(”click“,(e) - > ...' – brewster 2012-03-19 20:31:28

1

这发生在我身上大约一个星期前,这里是我的解决方案。首先,我确保我的application.js文件在文件的开头有这个。

//= require jquery 
//= require jquery_ujs 
//= require_self 
//= require_tree . 

的另一件事是确保轨道是不使用公共目录。有时你会拥有公共资产和资产,但确保你告诉轨道使用资产。但Rails 3.2应该自动包含这一点。打开你的config >> application.rb并检查以下内容。

# Enable the asset pipeline 
config.assets.enabled = true 
config.assets.version = '1.0' 
+0

我在这个列表中唯一缺少的是'//= require_self',我补充说,它仍然没有工作,但是你提示! – Justin 2012-03-19 18:35:23

0

我已经通过删除%RAILS_ROOT/lib/assets /文件夹中的所有文件解决了同样的问题。