10

複数の必須コンテキストと動的にロードされた jQuery バージョンとプラグインを利用するプロジェクトがあります。(jQuery のバージョンは一元的に供給され、インライン化されません)。ホストと各コンテキストの jQuery の整合性と、プラグインの分離が重要です。

次のユースケースを処理するために、RequireJS 用のローダー プラグインを作成しています。

  • 特定の require コンテキスト内で
  • そして、ホスティングページのfnやその他の必要なコンテキストに影響を与えることなく、次のことをしたいと思います:
    • 必要な任意のバージョンの jQuery をロードする
    • 特定の jQuery バージョンの fn にプラグインをロードする
    • 私のrequireコンテキスト内のモジュールがプラグインを共有できるように、必要なjQueryバージョンで参照整合性を持っています

ここにテストを含むローダーのサンプル プロジェクトがあります。

ローダーを使用して2番目の呼び出しを行うと、最後の状態で失敗し、以前のバージョンを吹き飛ばしています。

また、eval を使用して、ロードされたプラグインの $ 参照をローカルにロードされた jQuery バージョン スコープに分離しています。これを行うためのより良い方法についての考えをいただければ幸いです。

より簡単でクリーンな解決策がある場合は、シンプルに保ちたい (愚か)。

どうもありがとう。

4

1 に答える 1

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);
}
于 2013-03-03T23:46:37.000 に答える