2012-08-17 5 views
0

jQuery를로드하려면 RequireJS를 사용하고 싶습니다. (jQuery가 이미 초기화되어있는 제어되지 않은 환경에서 작동하도록 개발 된 모듈), 다른 버전의 jQuery가 필요할 때 몇 가지 문제가 있습니다. 결과는 알 수 없습니다. 내부 필요 기능 블록 jQuery 버전은 일종의 무작위입니다. 뭐가 잘못 되었 니? RequireJS 다른 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 
+1

을 사용해야합니다? 그렇다면 console.log 문이 작성된 순서대로 실행된다는 보장이 없습니다. –

+0

예, async가 필요하지만 require의 목적 중 하나는 캡슐화 된 코드 블록을 함수 클로저 안에 넣는 것입니다. 이론적으로 각 요구 사항에는 첫 번째 매개 변수로 전달되는 jQuery 버전이 있어야합니다. – Alexander

답변

0

의 jQuery AMD (Asynchronous Module Definition) 호환 버전을 사용을 가정하면, jQuery 오브젝트는 함수의 첫 번째 인수로 제공해야한다 다음 문제를 설명하는 코드 :


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

따라서 함수 내에서 사용할 수있는 jQuery 객체는 지역 범위 rath에 정의되어 있습니다. 어쨌든 세계적으로 정의 된 것보다. 당신이 AMD 호환되는 버전을 사용하지 않는 경우

, 당신은 내가이 (가)() '함수가 비동기 필요`가정 RequireJS Shim config.

관련 문제