2011-04-23 2 views
13

$.fn.myFunction 생성자를 사용하고 JavaScript의 사용자 정의 함수를 $('selector').myFunction()으로 호출하여 사용자 정의 jQuery 플러그인을 만들 수 있다는 것을 알고 있습니다.선택기 전제 조건없이 사용자 정의 jQuery 함수 만들기

그러나 현재 작업하고있는 프로젝트의 경우 선택기가 필요하지 않은 함수를 정의 할 수 있어야합니다. 실제로 MessageBox 플러그인과 비슷한 방식으로 작동하는 MessageBox 플러그인입니다. C#의 MessageBox 클래스. 다음과 같이 따라서, 내가 이상적으로 MessageBox로 기능을 만든 다음 전화를하고 싶습니다 :

var myMessage = $.MessageBox();을 다음 차례 myMessage.Show();

주의의 시작 부분에 jQuery를 기준으로 선택 brakets의 부족에 함수 호출.

모범 사례에 대한 조언은 감사의 뜻으로 전합니다.

답변

14

이 작동합니다 :

jQuery.MessageBox = function() { 
    var show = function() { 
    // something... 
    } 
    var hide = function() { 
    // something... 
    } 
    return { 
    show: show, 
    hide: hide 
    } 
} 
+1

이 좋은 사례입니까? – relipse

+0

@relipse : 왜 의심하는지 분명히 할 수 있습니까? – Amadan

+3

jquery의 네임 스페이스를 어지럽히는 것이 좋은 습관인지 아니면 다른 방법이 있는지 궁금 해서요. 그 동안 나는 위의 코드와 비슷한 selector를 사용하지 않는 자신의 dialogBox를 구현했습니다. https://github.com/relipse/jquery-dialogPrompt YAHOO! library에는 자신 만의 YAHOO.namespace() 함수가 있습니다. – relipse

5

relipse 좋은 포인트가 - 메인 네임 스페이스를 어지럽히고있다. 만약 당신이 예를 들어보다 많은 물체를 가지고 있다면 해결책이 될 것입니다. 메시지 박스는 다음과 같이 자신의 네임 스페이스를 만드는 것입니다 :

만 (이 경우 myLib에, 라이브러리의 이름)의 주요 공간 한 곳을 복용하는 것을 의미
jQuery.myLib = { 
    MessageBox: function() { 
    var show = function() { 
     // something... 
    } 
    var hide = function() { 
     // something... 
    } 
    return { 
     show: show, 
     hide: hide 
    } 
    } 
} 

. 이 같이 호출 것 :

jQuery.myLib.MessageBox.show() 
1
(function ($) { 
    $.MessageBox = function() { 
     var show = function() { 
      // something... 
     } 
     var hide = function() { 
      // something... 
     } 
     return { 
      show: show, 
      hide: hide 
     } 
    } 
})(Jquery); 

난 당신이 즉시 호출 함수에 더 나은 범위 네임 스페이스와의 충돌을 피하기 위해 생각합니다.