2010-02-28 10 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

दूसरा समाधान 'इस' संदर्भ और पैरामीटर को खो देता है। मेरा जवाब देखें – SLaks

+0

बहुत अच्छा मुद्दा, धन्यवाद। – JAL

संबंधित मुद्दे