2010-05-11 3 views
1

Drupal 사이트 내에서 제대로 작동하려면 기존 MooTools 코드를 얻으려고합니다. 나는 MooTools 코드가 독자적으로 작동한다는 것을 알고 있습니다. 페이지에서 MooTools 라이브러리를로드하면 jQuery가 작동을 멈춘다.달러 금고 모드에도 불구하고 MooTools와 jQuery 충돌 -

(MooTools 개발자에 따르면) Moo가 이미로드 된 jQuery 라이브러리에서 이미 정의 된 $를 도용하지 못하게하는 jQuery 이후에 MooTools를 포함하고 있습니다.

내 Moo 코드 내의 모든 $ 참조를 document.id로 변환했습니다.

페이지를로드 할 때 Moo 코드는 작동하지만 jQ 코드는 작동하지 않습니다. Moo는 여전히 $ 변수를 jQ에서 훔쳐서 스스로 재정의하고있는 것 같습니다. 테스트 목적으로, 내가로드하려는 Moo 코드는 간단한 12 아코디언 스크립트입니다. 이 문제가 해결되면 더 복잡한 것들을 사용해야합니다.

Drupal은 jQuery를 광범위하게 사용하므로 jQ의 no_conflict 모드를 사용하는 것이 실용적인 옵션이 아닙니다. 내가 이해하는 것으로부터, 이것은 달러 안전 모드를 고려할 때 가능할 것입니다.

MooTools Core 1.2.4 및 MooTools More 1.2.4.4 및 jQuery 1.2.6 (1.4.2 시도)도 사용하고 있습니다.

답변

0

이것은 귀하의 경우에 사용되는 플러그인에 더 의존합니다. jQuery 자체가 잘 작동 할 수도 있지만, 플러그인이 권장 사항에 의해 작성되지 않으면 작동하지 않습니다.

3

$을 사용하여 jQuery 함수에 액세스하는 대신 항상 jQuery()을 사용할 수 있습니다. .ready()를 사용하는 경우

당신도, 예를 들어 자신의 식별자를 전달할 수 있습니다

jQuery(document).ready(function(myIdentifier){ 

    myIdentifier(); // this is the jQuery reference! 

}); 
3

홀수를,이 발생한다 하지 뭔가, 솔직히 말해서이다. mootools 1.2.3 (?) (1.2.1이었을 수도 있기 때문에)은 이미 페이지에 정의되어있는 경우 $ 할당을 대신 사용하지 않습니다. 로드의 순서로 설명되는 경우 즉, :

JQuery와 Mootools의

... 다음 moootools가 자동으로 호환 모드로 가서 document.id으로 돌아갑니다. jQuery가 noConflict 모드에서로드되어 jQuery를 $로 할당하지 못하게되고 mootools가 잡아 내지 못하게 할 수있는 유일한 경우입니다.

어쨌든 이론입니다. 다른 행동을 보게된다면, 브라우저에 문제가 있습니다. 스크립트를 게으른 로딩 또는 비 차단/병렬 로딩 중입니까? 다음

<div id="foo"></div> 

및 (/ noConflict O를 승)와 $를 재 할당이 너무 같은 범위에 Mootools의 돌봐 document.id하는

여기

가장 좋은 방법은 일반적으로, 기본 모드에서 jQuery를 남겨 :

$("#foo"); // jquery 

(function($) { 
    $("foo"); // mootools. 
})(document.id); 

최신 mootools 질문을 통해 최근 주제에 대해 많은 질문이있었습니다. 실패하면 프로젝트에 URL을 게시하십시오.

분명히 콘솔링 할 수 있습니다.log ($)를 확인/확인하려면 http://www.jsfiddle.net/AxVqy/ -> testcase

1

$ 대신 jQuery을 사용하지 않는 이유는 무엇입니까? 어떤 이유로 당신이 할 수없는 경우 noConflict(); 당신이 이런 식으로 뭔가 할 수있는 jQuery를위한 $의 사용을 중지해야 의미하지 않습니다 : 단지 대체

<script type="text/javascript" src="mootools.js"></script> 
<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript"> 
    $.noConflict(); 
    jQuery(document).ready(function($) { 
    // Code that uses jQuery's $ 
    }); 
    // Code that uses mootools $ 
</script> 

당신은 아마 플러그인으로 jQuery를 사용하여 문제가 그들의 내가 처음 Mootools의를 loadeed jQuery(document).ready(function($) {});

통지 $(function(){}, 당신은 또한 코드의 각 부분의 주위에이 같은 작업을 수행 할 수 있습니다

(function($) { 
    $("id"); // mootools. 
})(document.id); 


(function($) { 
    $("#id"); // jQuery. 
})(jQuery); 

나는를 찾는 비슷한 문제에 봉착 다른 라이브러리의 전부 또는 하나 또는 모든 조합을로드하는 솔루션 일단 내가 어떻게하는지 생각하면, 나는 당신과 그것을 나눌 수 있다고 확신합니다. 그리고 당신은 분명히 이것을 할 수있을 것입니다. 하지만 위의 솔루션은 당신을 위해 작동해야합니다, 나는 이미 jQuery와 mootools를 원하는 순서와 함께로드하기 위해 이것을 사용했습니다.

0

둘 다 사용해야하는 경우 먼저 jQuery를 포함하고 Mootools (1.3)를 포함합니다. jQuery를 신경 써야 할 필요가 없다면 Mootools 호환성이 자동으로 시작됨에 따라 충돌이 없습니다. Mootools에는 $, 빠른 바로 가기에는 jQuery를 정의합니다. (function($){ /*stuff*/ })(document.id)