0

ここで私の最初の Rails アプリケーションを開発しています。私のビューで jQuery を動作させようとすると、Rails 3.2.8 の現在のバージョンで単に「すぐに」動作するはずです。

これが私が得たものです:

  • register#indexと呼ばれるビュー('register' と呼ばれるコントローラーを使用):

    <head>
      <%= stylesheet_link_tag    "application", controller.controller_name %>
      <%= javascript_include_tag "application", controller.controller_name %>
    </head>
    
  • このビューによって読み込まれる 2 つの JS ファイル: application.jsregister.js

    アプリケーション.js :

    //= require jquery
    //= require jquery_ujs
    //= require twitter/bootstrap
    

    register.js :

    $(document).ready(function(){
    alert("Hello, jQuery!");
    });
    

ブラウザーからページを読み込むと、含まれている jQuery.js ファイルと、読み込まれたregister.jsが次のように変換されていることがわかります。

(function() {

}).call(this);

alert()呼び出しがありません (トリガーされません) 。なぜこれが空白なのですか?これは私の gem の問題ですか、それとも jQuery 構文の問題ですか?

注目に値するいくつかの追加事項:

  • Gemfile には が含まれておりjquery-rails、実行bundle installしてrails g jquery:install
  • 以外のjQueryを入れてもalert()、関数本体は空のままです。
  • 各テストの間にキャッシュをクリアしました。
  • ブラウザ (Chrome) によって報告された JavaScript エラーはありません
  • このコードは、多かれ少なかれ jQuery チュートリアルから直接コピーして貼り付けたものです。

編集:私のjavascriptタグがページに含まれている方法を追加しました。

4

3 に答える 3

0

これを試してください:

$(document).ready(function(){
   alert("Hello, jQuery!");
});

application.js でこのスクリプトを使用します。警告が表示された場合は、register.js ファイルが正しく含まれていないことを意味します。

于 2012-10-17T21:02:27.377 に答える
0

理解した。

そのため、jQuery が私のapplication.jsファイルにロードされていたとしても、 register.jsファイルを使用する範囲にはありませんでした(これは明らかに並行してロードされていました。おそらく、javascript_include_tag.

解決策は、jQueryをロードするregister.jsの先頭にマニフェスト コメントを追加することで、jQuery が追加のregister.jsファイルのスコープ内にあることを確認することでした。

新しく改訂されたregister.jsファイル:

//= require jquery
//= require jquery_ujs

$(document).ready(function(){

    alert('Hello, jQuery!');

});

:

たまたま私もtwitter-bootstrap-railsを使用していますが、これには明らかに jQuery がパッケージに含まれています。上記のインクルードを使用する//= require jqueryと、機能しましたが、ブラウザーにエラーがスローされました。

Uncaught typeerror Object#<object> has no method 'popover'

このエラーを回避するために、Twitter のブートストラップ リファレンスを含め、他の jQuery リファレンスは省略しました。私のregister.jsファイルは次のようになりました。

//= require twitter/bootstrap

$(document).ready(function(){

    alert('Hello, jQuery!');

});

これが、将来同様の問題に遭遇した人に役立つことを願っています!

  • デイブ
于 2012-10-17T20:58:23.010 に答える
0

現在、各コントローラーに固有の .js ファイルのみをロードしています。headすべての .js ファイルと .css ファイルを一度にロードするように変更してみて、それが役立つかどうかを確認してください。

application.html.erb

<head>
  <%= stylesheet_link_tag "application-all", :media => "all" %>
  <%= javascript_include_tag "application" %>
</head>

また、次のようにアプリケーションの .js を変更して、すべての .js ファイルを含める必要があります。

アプリケーション.js

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

それでもうまくいかない場合は、JavaScript を .js ファイルからビューに移動して、jQuery が正しく配置されていることを確認してください。次のようにします。

<body>
  <script type="text/javascript">
    $(document).ready(function(){
      alert("Hello, jQuery!");
    });
  </script>
</body>
于 2012-10-17T20:47:29.573 に答える