0

したがって、コントローラー用に次の 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 にラップされていない場合は機能しますが、理想的にはこれを避けたいと思います。

4

2 に答える 2

0
$ ->
  'alert hello' 

への呼び出しではなく、そこに文字列を配置しただけなalertので、これは何もしません。

$ ->
  alert('hello')

それはうまくいくはずです。

于 2012-08-20T11:59:56.470 に答える
0

少し前にこの種の問題があったことを覚えています。理由はわかりませんが、コーヒーファイルを削除して再度作成したところ、機能しました。CoffeeScript の構文はインデントに基づいているため、インデントも確認してください。

また、同じプロジェクトで使用する可能性のある他の JS フレームワークがある場合に混乱しないように、jQuery ->代わりに を使用する必要があります。$ ->

于 2012-08-20T12:18:44.637 に答える