2010-03-28 12 views
80

मैं अपनी प्लगइन कॉलबैक कार्यक्षमता देने की कोशिश कर रहा हूं, और मैं इसे कुछ हद तक पारंपरिक तरीके से संचालित करना चाहता हूं:jQuery प्लगइन: कॉलबैक कार्यक्षमता जोड़ना

myPlugin({options}, function() { 
    /* code to execute */ 
}); 

या

myPlugin({options}, anotherFunction()); 

मैं उस पैरामीटर को कैसे संभालूं कोड? क्या इसे एक पूर्ण इकाई के रूप में माना जाता है? मुझे पूरा यकीन है कि मुझे पता है कि मैं निष्पादन कोड कहां रखूंगा, लेकिन मैं निष्पादित करने के लिए कोड कैसे प्राप्त करूं? मुझे इस विषय पर बहुत सारे साहित्य नहीं मिल रहे हैं, इसलिए आपकी मदद के लिए अग्रिम धन्यवाद।

+2

आपकी दूसरी वाक्यविन्यास इसे पारित करने के बजाय फ़ंक्शन को कॉल करता है। आपको '()' – SLaks

+6

व्यक्तिगत रूप से मुझे लगता है कि आप "विकल्प" पैरामीटर के हिस्से के रूप में कॉलबैक निर्दिष्ट होने से बेहतर हैं। यह विशेष रूप से सच है यदि यह विकसित करता है कि कॉलबैक की आपूर्ति करने के लिए एक से अधिक कारण हैं। – Pointy

+1

ऐसा कुछ कैसा दिखता है, पॉइंट? उत्तर-उत्तर प्रदान करने की देखभाल? – dclowd9901

उत्तर

159

बस प्लगइन में कॉलबैक निष्पादित करें:

$.fn.myPlugin = function(options, callback) { 
    if (typeof callback == 'function') { // make sure the callback is a function 
     callback.call(this); // brings the scope to the callback 
    } 
}; 

तुम भी विकल्प में कॉलबैक हो सकता है आपत्ति:

$.fn.myPlugin = function() { 

    // extend the options from pre-defined values: 
    var options = $.extend({ 
     callback: function() {} 
    }, arguments[0] || {}); 

    // call the callback and apply the scope: 
    options.callback.call(this); 

}; 

की तरह इसका इस्तेमाल यह:

$('.elem').myPlugin({ 
    callback: function() { 
     // some action 
    } 
}); 
+0

बहुत धन्यवाद, महोदय। एक जादू की तरह काम करता है। – dclowd9901

+0

इस उत्तर के लिए बस एक जोड़। एक पोस्ट है जो यह बताती है: http://jquery-howto.blogspot.com/2009/11/create-callback-functions-for-your.html – RaphaelDDL

+0

@ डेविड कॉलबैक पैरामीटर कैसे जोड़ें, मैं यह ' $ ('elem')। myPlugin ({कॉलबैक: फ़ंक्शन (पैरा) {// कुछ एक्शन}}); ' –

1

दूसरा पैरामीटर लेने के लिए अपना प्लगइन फ़ंक्शन बदलें। यह मानते हुए कि उपयोगकर्ता एक फ़ंक्शन पास करता है, उस पैरामीटर को नियमित फ़ंक्शन के रूप में माना जा सकता है।
ध्यान दें कि आप कॉलबैक को विकल्प पैरामीटर की एक संपत्ति भी बना सकते हैं।

उदाहरण के लिए:

$.fn.myPlugin = function(options, callback) { 
    ... 

    if(callback)  //If the caller supplied a callback 
     callback(someParam); 

    ... 
}); 
5

मुझे नहीं पता कि मैं आपके प्रश्न को सही तरीके से समझता हूं या नहीं। लेकिन दूसरे संस्करण के लिए: यह तुरंत anotherFunction पर कॉल करेगा।

मूल रूप से अपने प्लगइन समारोह के कुछ प्रकार है कि इस तरह दिखता है किया जाना चाहिए:

var myPlugin = function(options, callback) { 
    //do something with options here 
    //call callback 
    if(callback) callback(); 
} 

आप एक समारोह कॉलबैक के रूप में वस्तु प्रदान करने के लिए है, तो या तो function(){...} या anotherFunction (() के बिना)।

4

अतीत से एक विस्फोट वापस लाओ।

ध्यान देने योग्य बात है कि अगर आप दो तर्क पारित कर दिया, उदाहरण के लिए वर्थ:

$.fn.plugin = function(options, callback) { ... }; 

तो फिर तुम प्लगइन विकल्पों तर्क के बिना लेकिन एक कॉलबैक के साथ फोन तो आपको समस्या आ जाती होगी:

$(selector).plugin(function() {...}); 

मैं इस का उपयोग यह थोड़ा और अधिक लचीला बनाने के लिए:

if($.isFunction(options)) { callback = options } 
0

एक उदाहरण थोड़ी देर हो चुकी, बू यह उपयोगी हो सकता है। तर्कों का उपयोग करना एक ही कार्यक्षमता बना सकता है।

$.fn.myPlugin = function() { 
    var el = $(this[0]); 
    var args = arguments[0] || {}; 
    var callBack = arguments[1]; 
    ..... 
    if (typeof callback == 'function') { 
     callback.call(this); 
    } 
} 
1

मुझे लगता है कि यह आप

// Create closure. 
 
(function($) { 
 
    
 
    // This is the easiest way to have default options. 
 
    
 
     var settings = $.extend({ 
 
      // These are the defaults. 
 
    
 
      onready: function(){}, 
 
    
 
      //Rest of the Settings goes here... 
 
     }, options); 
 
    
 
    // Plugin definition. 
 
    $.fn.hilight = function(options) { 
 
    
 
     //Here's the Callback 
 
     settings.onready.call(this); 
 
    
 
     //Your plugin code goes Here 
 
    }; 
 
    
 
// End of closure. 
 
    
 
})(jQuery);

मैं अपनी खुद की jQuery Plugin.I बनाने के बारे में एक लेख साझा किया था लगता है कि आप की जाँच करनी चाहिए मदद कर सकता है कि http://mycodingtricks.com/jquery/how-to-create-your-own-jquery-plugin/

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