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(异步模块定义)兼容版本的 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 回答