1

さまざまなサイトでホストされる Javascript アプリケーションを作成しています。アプリケーション自体は jQuery と jQuery UI を使用します。私はjQuery.noConflict(true)トリックを認識しており、現在それを使用しているため、グローバル空間を汚染しません。私の目的は、ホスティング サイトの何かと競合しないように、常に jQuery とそのプラグインをアプリケーションのローカルに保つことです。ホスティング サイトが独自の jQuery (おそらく異なるバージョン) を読み込んで、いくつかのプラグインを追加できるようにする必要があります。

ここで、アプリを AMD モジュールとして構成したいと思います。ホスティング サイトから AMD ローダー (require.js、curl など) を使用するように要求することは問題ありませんが、AMD API に準拠するものであれば何でも要求したいと思います (はい、それはまだ 100% 準備が整っていません)。

それはまったく可能ですか?ホスティング サイトが requirejs、curl、または Dojo AMD ローダーなどを使用できるように、相互運用可能な方法でそれを行うことはできますか?

たとえば、次のようにします。

define(['jquery'], function($) {
    var myLocaljQuery = $.noConflict(true);

    ... my app module implementation here ...

});

アプリケーションで使用する jQuery のパスを指定するにはどうすればよいですか? 私が理解している限り、次のようなことはできません。

require.config({
    paths: {
       'jquery' : 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min'
    }
});

define(['require'], function(require) {
    require(['jquery'], function($) {
        var myLocaljQuery = $.noConflict(true);

        ... my app module implementation here ...
    });
});

1 つ目requireはグローバル オブジェクトであり、これは requirejs に固​​有であるためです。

4

1 に答える 1

0

いろいろ調べた結果、現時点では無理だと思います。少なくとも 1 つ - モジュール ID は AMD コンテキスト内でグローバルであるため、アプリケーションで「jquery」または「jquery-ui」モジュール ID を単純に使用することはできず、誰かがアプリケーションをホストするときに競合が発生しないことを確認してください。 AMD経由でもjQuery(潜在的に他のバージョン)を使用したいと考えています。ここで例を参照してください:

curl.js は、他のバージョンの jQuery を AMD モジュールとしてロードする可能性のあるサードパーティのスクリプトとの競合を防ぎません。

私の知る限り、AMD は独自のアプリ内のものをモジュール化することを目的としています。サードパーティ製アプリとの統合はあまりサポートされていません。少なくとも、競合を避けるためにカプセル化を行いたい場合はそうではありません。

于 2012-07-29T09:25:53.967 に答える