0

RequireJS を使用して jQuery (jQuery が既に初期化されている可能性のある制御されていない環境で動作するように開発したモジュール) をロードしたいのですが、異なるバージョンの jQuery が必要な場合にいくつかの問題があります。結果は期待できません。require 関数ブロック内の jQuery のバージョンはランダムです。なにが問題ですか?問題を説明するコードは次のとおりです。

<!DOCTYPE html>
<html>
<head>
    <script data-main="scripts/main" src="http://ajax.cdnjs.com/ajax/libs/require.js/0.24.0/require.min.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
</head>
<body>

<script>
    console.log(jQuery.fn.jquery);

    setTimeout(function(){
      require(["http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"], function() {
      console.log($.fn.jquery);
      });
    },1000);
    setTimeout(function(){
      require(["http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"], function() {
      console.log($.fn.jquery);
      });
    },2000);

    setTimeout(function(){
      require(["http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.js"], function() {
      console.log($.fn.jquery);
      });
    },3000);

    setTimeout(function(){
      require(["http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"], function() {
      console.log($.fn.jquery);
      });
    },4000);

    setTimeout(function(){
      require(["http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"], function() {
      console.log($.fn.jquery);
      });
    },5000);

    setTimeout(function(){
      require(["http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"], function() {
      console.log($.fn.jquery);
      });
    },6000);

    setTimeout(function(){
      require(["http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"], function() {
      console.log($.fn.jquery);
      });
    },7000);

    setTimeout(function(){
      require(["http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.js"], function() {
      console.log($.fn.jquery);
      });
    },8000);

    setTimeout(function(){
      require(["http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"], function() {
      console.log($.fn.jquery);
      });
    },9000);
</script>
</body>
</html>

結果は次のとおりです。

1.6.2
1.8.0
1.4.4
1.8.0
1.8.0
1.6.2
1.6.2
1.6.2
1.6.2
1.6.2
4

1 に答える 1

0

AMD (Asynchronous Module Definition)互換バージョンの jQueryを使用していると仮定すると、jQuery オブジェクトを関数の最初の引数として使用できるようにする必要があります。


require(["some_version_of_jquery.js"], function(jQuery) {
      console.log(jQuery.fn.jquery);
      });

そのため、関数内で使用可能な jQuery オブジェクトは、グローバルに定義されたスコープではなく、ローカル スコープで定義されます。

AMD 互換バージョンを使用していない場合は、RequireJS Shim 構成を使用する必要があります。

于 2012-08-17T15:02:31.313 に答える