2010-02-28 5 views
8

순간 jQuery 플러그인을 실행하면 구문에 논리가 표시됩니다. 예를 들어더 나은 jQuery 플러그인 작성

내가 가진 :

(function($) { 
    $.fn.myplugin = function(action) { 

     if(action == "foo"){ 

     } 

     if(action == "bar"){ 

     } 

     if(action == "grapefruits"){    

     } 

    } 
})(jQuery); 

이것에 대해 갈 수있는 더 나은 방법이 있나요?

또한 이벤트 핸들러에서 플러그인 내에서 선언 할 수 있습니까?

답변

9

당신은 객체에 다른 기능을 저장하고이 같은 인덱서, 사용할 수 있습니다

(function($) { 
    var methods = { 
     foo: function(action) { ... }, 
     bar: function(action, someParam) { ... }, 
     grapefruits: function(action, param1, param2) { ... }, 
     ... 
    }; 

    $.fn.myplugin = function(action) {  
     methods[action].apply(this, arguments); 
    } 
})(jQuery); 
+0

문자열을'$ ("....")'로 감싸고 일부 함수를 추가하여 문자열을 조작 할 수 있습니까? – uzay95

2

작업을 여러 번 확인하는 이유가, 없다를? 다른 사람도 사용할 수 있습니다. 나는 switch의 구문을 개인적으로 좋아하지 않으며이 스타일을 선호합니다. 당신은 그것을 할 수있다

if(action == "foo"){ 
    } 
    else if(action == "bar"){ 
    } 
    else if(action == "grapefruits"){    
    } 
    else{ 
    //this is the default/unspecified case 
    } 

또 다른 옵션은 각각 개체에 이름으로 저장하는 것입니다. 이것은 파이썬에서도 많이 사용됩니다.

var plugin_actions={ 
     'foo':function(){}, 
     'bar':function(){}, 
     'grapefruits':function(){} 
     } 
    plugin_actions[action](); 
+1

두 번째 솔루션은 'this'컨텍스트와 매개 변수를 잃습니다. 내 대답을 보라. – SLaks

+0

아주 좋은 지적입니다, 고마워요. – JAL