0

因此,我的控制器有 3 个以下 JS 文件:

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

出于某种原因,当我将 JS 代码放入我的 users.js.coffee 或 facebook.js.coffee.erb(或任何其他文件)中的 $(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 的其他文件中时,它可以工作,但我最好避免这种情况。

4

2 回答 2

0
$ ->
  'alert hello' 

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

$ ->
  alert('hello')

那应该行得通。

于 2012-08-20T11:59:56.470 回答
0

我记得前段时间遇到过这样的问题。我不知道为什么会发生这种情况,但是我删除了咖啡文件并再次创建它们并且它起作用了。还要检查你的缩进,因为 CoffeeScript 的语法是基于它的。

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

于 2012-08-20T12:18:44.637 回答