2012-05-09 11 views
2

私は私のRailsアプリが使用するjQueryのアドオンの数を持っている上でjQueryの拡張をロードに失敗しました。ほぼすべてのページで、jQuery.cookies拡​​張機能を使用して、特定の要素を表示するかどうかを判断します。IEは、特定のページ

このアドインは、もともと資産/ JavaScriptの下に独自のファイルで、次のマニフェストを使用してロード:

//= require jquery 
//= require jquery_ujs 
//= require jquery-ui 
//= require_self 
//= require_directory . //there is a subdirectory i'm ignoring, but jquery.cookies isn't in it 

のInternet Explorerでは、jquery.cookies.jsは以外に必要なすべてのページに評価されました。 cookiesオブジェクトがjQueryに添加されていなかった2つの。次のコードを評価したとき、それは「オブジェクトはこのプロパティまたはメソッドをサポートしていません」などのエラーを投げていた影響を受けたページで

javascript_include_tag('application') 

、これらのページは私のアプリ上の他のページと同じJavaScriptを含まクッキーの方法に関する:$(document).ready()を呼び出す前に

if ($.cookie("showHero") == 'true' || $.cookie("showHero") == null) { 
    $('#hero').css('display', 'block'); 
} else { 
    $('#hero').css('display', 'none'); 
} 

、application.jsの先頭にjQuery.cookies.jsの内容を移動すると、この症状を緩和するとJavaScriptが正しく実行できるようにするようだが、私は怖いです私は本当の問題を解決していません。

これは、プリコンパイルされた資産を開発・生産の両方で発生します。

これらのページのどちらがページに固有だ任意のJavaScriptを紹介し、なぜjQuery.cookiesは、このような狭い場合に評価することができないのでしょうか?複数の異なるjavascriptファイルを処理するための規約がありますか?私は逃した可能性があることを認識していませんか?

編集

私はそれを取り戻します。 jquery.cookiesの内容をapplication.jsに移動すると、ページが初めて読み込まれたときに動作するように見えます。後続のリロードは同じ動作を示します。完全な損失。

答えて

1

このページにのみFB.init()が実行され、クッキーオブジェクトにアクセスするために使用されていた$シンボルが詰まっているように見えることが判明しました。

私は、これが理由だった全くわかりません。プロトタイプライブラリを使用したFBの結果であったか、またはFBオブジェクトによって何らかの理由でjQueryが再初期化された可能性があります。 jQuery代わりの$を通じてjQuery.noConflict()、それを呼び出すことが、別の関数の内部で$(document).ready()を囲むことで、JSファイルの内容を変更する

は、ジャバスクリプトの両方のセットを実行することができます同様にうまく働いたが、同様に任意のjs.erbファイルを変更する必要がありました。

//= require jquery 
//= require jquery-ujs 

(function($) { // the $ is explicitly set to jQuery for this scope 
    $(document).ready(function() { 

    // no more complaints that 'cookies is not a method of $' 
    if ($.cookies('showHero') == true) { 
     // do something 
    } 
    }); 
})(jQuery); 
関連する問題