2012-05-11 3 views
3

두 개의 jquery 플러그인을 사용하고 있습니다. 두 함수 모두 프로토 타입 함수 removeTag을 사용하여 jquery를 확장합니다. 이렇게하면 두 번째로로드 된 플러그인이 올바르게 작동하지만 첫 번째 플러그인은 제대로 작동하지 않습니다.jquery 네임 스페이스 충돌을 처리하는 데 좋은/최선의 방법은 무엇입니까?

빠른 패치에서 두 번째 플러그인의 removeTag 및 모든 호출을 다른 것으로 바 꾸었습니다.

분명히 좋은 해결책은 아닙니다. 업그레이드를 수동으로 편집해야하며 아직 실현하지 못했던 다른 네임 스페이스 충돌이있을 수 있습니다.

아무도이 문제를 처리하기위한 효과적인 전략을 추천 할 수 있습니까? 내가 사용하고

두 플러그인은 다음과 같습니다

+0

두 개의 jQuery 라이브러리 또는 두 개의 jQuery 플러그인. 거기에는 큰 차이가 있습니다. 두 개의 jQuery 라이브러리 인 경우 removeTag만이 충돌하는 것은 아닙니다. –

+0

라이브러리 란 무엇입니까? 네임 스페이스의 이름이 지정되면 removeTag의 네임 스페이스 버전을 호출 할 수 없습니까? 또는 네임 스페이스 내의 개별 메소드를 수정하는 대신 이름을 지정할 수 있습니까? – Marc

+0

HTML 문서 내에서 라이브러리/스크립트 호출을 그냥 뒤집어두고 닫는'' 태그 앞에 코드를 넣으면 운이 좋습니다. –

답변

4

당신은 아래의 코드와의 js 파일을 추가 할 수 있습니다

if (jQuery) { 
    jQuery.namespace = function(namespace) { 
      var names = namespace.split("."); 
      var parent = window; 
      for (var index = 0; index < names.length; index++) { 
        if (!parent[names[index]]) { 
          parent[names[index]] = function() { 
            throw "Namespace, Cannot instantiate"; 
          } 
        } 
        parent = parent[names[index]]; 
      } 
    } 

}

그리고 스크립트에 당신처럼 사용하여 다음을 수행 할 수 있습니다

$.namespace("Somejs.MyCustomjs"); 

그리고 나중에 코드와 같은 전체 네임 스페이스를 참조에 :

SomeJs.MyCustomjs.myFunc(); 

그것은

편집을하는 데 도움이 희망을 : 귀하의 js 클래스의 선언에서 네임 스페이스를 사용하기 위해 netted했다고 언급하는 것을 잊었습니다.

+0

+1 나는이 방법을 좋아합니다. – davidethell

0

하나의 가능성은 b 전자 jQuery.sub()을 사용하십시오.

http://api.jquery.com/jQuery.sub/

이것은 당신이 jQuery 객체의 복사본을 생성하고 하나의 플러그인이 복사본을 사용하도록 허용합니다.

그러나 큰 단점은 플러그인 중 하나를 다룰 때 jQuery에 적절한 별칭을 사용해야한다는 것입니다. 플러그인 중 적어도 하나가 페이지로드시 한 번 호출하면 문제가되지 않을 수도 있습니다.

편집이 : 분명히이 1.7에서 더 이상 사용되지 않습니다 첫 번째 플러그인에 넣은 후 1.8

0

에 플러그인으로 이동합니다, 당신은에로드 할 때 다음 다른 이름 $.fn.removeTagsPlugin=$.fn.removeTags으로 함수를 정의 두 번째 플러그인은 $ .fn.removeTags를 행복하게 덮어 쓸 수 있습니다. 여기에는 한계가 있습니다 .. 첫 번째 플러그인이 내부적으로 removeTags를 사용하고 새로운 플러그인의 removeTags 버전을 사용하면 작동하지 않습니다. 그러면이 솔루션은 작동하지 않습니다.

관련 문제