为什么我的Rails应用程序中的JavaScript文件会出现奇怪的行为?

时间:2012-08-20 11:29:23

标签: ruby-on-rails ruby-on-rails-3

所以我的控制器有3个以下的JS文件:

movie.js.coffeee
application.js
facebook.js.coffee.erb
sessions.js.coffee
users.js.coffee

出于某种原因,当我在我的users.js.coffee或者facebook.js.coffee.erb(或者任何其他文件)中将JS代码放入$(document).ready中时,它不会火。即我在users.js.coffee中添加一个简单的警报:

$ ->
  alert 'hello' 

但这不会执行。

我还有代码在facebook.js.coffee.erb中使用Facebook的JavaScript SDK,但是当我在$(document).ready()中放置代码时,所有代码都不会执行。

我不得不求助于把我所有的JS代码都放在movie.js.coffee文件中,而且一切都在那里工作。在该文件中,我有以下代码:

$ ->

    #Home page login dropdown
    $('.dropdown-toggle').dropdown()

    $('.dropdown input, .dropdown label').click (e) ->
        e.stopPropagation()

    #Users edit page
    $('.hint a').tooltip()

    #Movie show page
    $('#movie-tabs a:first').tab('show')

    $('#movie-info').stickyMojo({footerID: '#footer', contentID: '#movie-description'})

我的application.js文件如下所示:

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

这很烦人,不知道为什么会发生这种情况?当JS代码没有包装在其他文件中的$(document).ready中时,它可以正常工作,但我最好还是避免这样做。

2 个答案:

答案 0 :(得分:0)

$ ->
  'alert hello' 

你刚刚在那里放了一个字符串,而不是拨打alert,所以这不会做任何事情。

$ ->
  alert('hello')

这应该有效。

答案 1 :(得分:0)

我记得刚才有这种问题。我不知道它为什么会发生,但我删除了咖啡文件并再次创建它们并且它有效。检查你的缩进,因为CoffeeScript的语法基于它。

此外,您应该使用jQuery ->而不是$ ->,这样如果您可能在同一个项目中使用任何其他JS框架,就不会感到困惑。