2012-10-26 13 views
10

私は複数のコンテキストと動的にロードされたjQueryのバージョンとプラグインを使用するプロジェクトを持っています。 (jQueryのバージョンは一元的にソースされ、インライン化されません)。ホストと各コンテキストのためのjQueryの完全性とプラグインの分離は非常に重要です。RequireJS - コンテキスト内でのjQueryのバージョンとプラグインの分離

私は以下のユースケースを処理するためRequireJSのためのローダプラグインを書いています:特定以内

  • コンテキストを必要とホスティングページのFNまたはその他に影響を与えることなく、コンテキストを必要とする、私はでしょうしたい:
    • 負荷のjQueryのすべてのバージョンは、私は特定のjQueryのバージョンのFNへ
    • ロードプラグインを必要とする
    • は、私のコンテキストを必要内の任意のモジュールをプラグイン

を共有することができ、私はテストhereとローダーのサンプルプロジェクトを持っているように必要なjQueryのバージョン上で参照整合性を持っています。

ローダーを使用して2回目の呼び出しを行うと、前のバージョンが壊れています。

また、evalを使用して、ロードされたプラグインの$ referenceをローカルにロードされたjQueryバージョンのスコープに分離しています。これを行うためのよりよい方法に関する考えは高く評価されます。

簡単で清潔なソリューションがあれば、簡単に(愚かなままに)しておきたいです。

ありがとうございます。

+0

そして、evalを避けるために、あなたは '[「jqueryのバージョン」](定義、機能サーバサイドスクリプトCONCATENATEを持つことができます(jQueryの){ var $ = jQuery; '+ [プラグインsrc] +'}); 'そして、プラグインの名前とjqueryバージョンを含むスクリプトをそのクエリ文字列にロードする – wheresrhys

答えて

1

私はまた、これをプラグインで実行しなければなりませんでした。 http://api.jquery.com/jQuery.noConflict/をチェックしてください。例を挙げよう:

jQueryLocal = jQuery.noConflict(true); 

しかし、確かに複数のjQueryを読み込まないようにしてください。たとえば、十分なバージョンが既にロードされているかどうかを調べることができます(私の場合、何かをロードする前に1.9+が利用可能かどうかを確認し、ローカル変数を既存のグローバルjQueryオブジェクト私がしたプラグインを使用していない

あなたがしてバージョンを確認することができます。

var jQueryLocal; 
var versions = (jQuery && /^([0-9]+)\.([0-9]+)\./.exec(jQuery.fn.jquery)) || [0,0]; 
if(versions[0] > 1 || versions[1] >= 9) { 
    jQueryLocal = jQuery; 
} else { 
    // load script with whatever you're doing. If it's asynchronous, set callbacks etc. 
    jQueryLocal = jQuery.noConflict(true); 
} 
関連する問題