2013-03-27 2 views
2

나는 글로벌 네임 스페이스의 일부 기능을 사용하여 일부 Java 스크립트 라이브러리 (A)를 가져 오는 엔터프라이즈 응용 프로그램을 보유하고 있습니다.자바 스크립트 네임 스페이스 충돌을 피하는 방법은 무엇입니까?

고객은 우리 플랫폼을 확장하고 jquery를 가져 오면 이름 공간이 충돌 할 수 있습니다.

jquery가 널리 사용되며 모든 고객이이를 사용하기 때문에 고객이 네임 스페이스 충돌을 피할 수있는 가장 좋은 방법은 무엇입니까?

라이브러리 A의 네임 스페이스는 어떻게 변경합니까? 가장 편리하고 안전한 방법은 무엇입니까?

답변

3

jQuery의 경우 가장 쉬운 방법은 jQuery.noConflict()을 사용하여 $ 대신 새 선택기 변수를 가져 오는 것입니다.

var j$ = jQuery.noConflict(); 

j$('#test-id') 
2

고객이 글로벌 공간에 영향을주지 않는 인터페이스를 구축해야합니다.

고객의 코드를 자체 기능으로 감싸십시오.

(function() { 
    var window, global; // Keep these private to this function 
    // Customer code here 
])(); 

그들이 당신의 기능에 액세스하는 사용자는 인터페이스를 제공해야합니다,하지만 당신이 어떻게 응용 프로그램에 따라 다릅니다, 그래서 예를 제공 할 수 없습니다. 해당 고객 코드에 의해 조작되어야하는 것을 포함하는 오브젝트에 대한 액세스를 제공하는 매개 변수를 전달하는 것만 큼 간단 할 수 있습니다.

이제 모든 것이 작동하지 않습니다. 분명히, 코드가 액세스 할 수있는 영역을 크게 제한하고 있습니다. 해당 기능에 대한 액세스 권한을 직접 제공해야합니다.

+0

익명의 기능에서 창과 전역을 선언하는 점은 무엇입니까? 로컬 범위가 여전히 창과 같은 전역 속성을 볼 수 없습니까? – Sledge

1

사용이 구조 :

(function ($, a, b) { 
    // ... place your code here 
})(jQuery, myLibraryA, otherLibraryB); 
로컬 범위 (내부에 선언 된 모든 변수와 함수가 지역되며 간섭하지 않습니다를 생성 그것은 그래서 "익명 함수"라고

, 다른 코드와 함께). 이 라이브러리는 세 개의 라이브러리 인 jQuery, myLiberayA 및 otherLibraryB를 가져오고 로컬 범위에서 $, a 및 b 이름으로 볼 수 있습니다.

0

타사 javascript 라이브러리의 조합을 사용하려는 경우에도이 작업을 수행 할 수 있습니다. 기본적으로 각 객체에 대해 다른 네임 스페이스를 만듭니다.

if(window.jQuery && !(window.MyjQuery)){ 
    var window['MyjQuery'] = window.jQuery; 
    var j$ = window['MyjQuery']; //alias 

    j$(document).ready(function(){ 
    //code goes here... 
    }); 

} 
관련 문제