2011-08-23 5 views
0

예제의 이름 공간에 클래스를 생성 할 때.js 프로토 타입 프레임 워크로 namespacing

em.components.grid.Popup = Class.create(
{ 
    initialize: function(params){ 
    ... 
    }, 

    show:function(){ 
    // create or show 
    } 
}); 

을 em.components.grid합니까 나는 위의 네임 스페이스 경로를 사용하는 경우 I 쇼 방법에 액세스 할 수있는 다른 클래스에서이 평균.

// Another class in prototype 
em.components.grid.Popup.show(); 

또는 show class에 액세스하려는 사용자의 새 클래스가 동일한 네임 스페이스에 있어야합니다.

다른 언어의 패키지와 비슷한 이름 공간입니다. 네임 스페이스를 제공하면 모든 클래스를 예를 들어 한 네임 스페이스에 유지하고 다른 네 클래스는 다른 네임 스페이스의 그리드와 관련되지 않게 유지할 수 있습니다.

업데이트 위의 두 가지 질문이 생겼습니다. 위와 같은 클래스를 같은 네임 스페이스로 만듭니다. 그런 다음 다른 js 문서에서 클래스를 인스턴스화합니다.

var popup = new em.components.grid.Popup() 

그런 다음 팝업은 전역 변수가 아니겠습니까? 나는 가능한 한 내 파일에 갖고 싶지 않습니다. 내가 고유 한 이름 공간을주는 데 모든 어려움을 겪었던 것처럼 보입니다. 그런 다음 js 파일의 전역 변수에 클래스의 인스턴스를 만듭니다.

팝업의 경우 전역으로 설정하는 것이 가장 좋으며 롤오버 이벤트에서 생성하고 롤아웃 이벤트에서 제거하는 것이 가장 좋습니다.

//pseudo code 
    $$('domelementClass').observe('mouseover', function(event) { 
     var popup= new em.components.grid.Popup(event.target); 
    }) 

위의 문제는 롤아웃에서 제거 할 참조가 없습니다.

+0

누구든지 나에게 이것을 설명 할 수 있습니까? – Chapsterj

+0

누구나 도움을 받으시겠습니까? 좀 더 자세하게 설명 할 수 있도록 내 질문을 업데이트했습니다. – Chapsterj

답변

0

이름 공간은 충돌을 피하기 위해 포장의 목적이 동일합니다. 위의 예에서 볼 수 있듯이 JavaScript에서는 객체의 속성으로 네임 스페이스 함수 및 변수를 지정합니다.

위의 네임 스페이스 경로를 사용하면 다른 클래스에서이 의미는 show 메서드에 액세스 할 수 있습니까?

// 프로토 타입 emcoponents.grid.Popup.show()의 다른 클래스;

'show()'가 인스턴스 메소드이기 때문에 새 팝업이 있어야만 호출 할 수 있습니다. 네임 스페이스가있는 Popup을 다른 클래스의 인스턴스로 사용하거나 Java에서 정적 메서드처럼 show를 호출하려면 Popup.prototype.show()를 호출합니다.

var Popup = Class.create({ 
    initialize: function(params){ 
     alert("I exist"); 
    }, 

    show:function(){ 
     alert("show!"); 
    } 
}); 

// Popup.show(); // would error: 

// Uncaught TypeError: Object function klass() { 
//  this.initialize.apply(this, arguments); 
// } has no method 'show' 

Popup.prototype.show(); 

foo = new Popup(); 

foo.show(); 

몇 가지 유용한 링크 :

http://michaux.ca/articles/javascript-namespacing

http://blog.anselmbradford.com/2009/04/09/object-oriented-javascript-tip-creating-static-methods-instance-methods/

+0

감사합니다. 그러면 foo는 이제 전역 변수가됩니다. 내 네임 스페이스와 일치하는 예제에서는이 작업도 가능합니다. em.components.grid.Popup.prototype.보여 주다(). – Chapsterj

+0

네, 그렇게 할 수 있습니다. – kreek

+0

또한 새로운 문법을 사용하여 클래스를 인스턴스화하면 또 다른 질문이 생깁니다. 팝업의 경우 클래스를 제거하는 방법은 무엇입니까? 따라서 롤오버에서 클래스를 만든 경우 롤오버에서 제거해야합니다. 또는 클래스를 만든 다음 화면에서 요소를 숨기는 것이 더 낫습니다. 이렇게하면 수업은 한 번만 생성됩니다. – Chapsterj