jQuery प्लगइन: कॉलबैक कार्यक्षमता जोड़ना


86

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

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

या

myPlugin({options}, anotherFunction());

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


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

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

1
उस लुक, पोइंटी को कैसा लगेगा? उत्तर-उत्तर प्रदान करने के लिए देखभाल?
dclowd9901

जवाबों:


167

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

$.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
    }
});

इस जवाब के लिए सिर्फ एक ऐड। एक पोस्ट है जो इस बारे में बताती है: jquery-howto.blogspot.com/2009/11/…
राफेलडीडीएल

@ $('.elem').myPlugin({ callback: function (param) { // some action } });
डेविड

2
@JeaffreyGilbert आपको jQuery के संदर्भ को भी लाना चाहिए, मैं करूँगाoptions.callback.call(this, param);
डेविड हेलसिंग

@ डेविड मुझे दो कॉलबैक चाहिए, कॉल animateBeforeऔर animateAfter। कृपया मुझे बताएँ कि अपने समाधान का उपयोग कैसे करें ??
user007

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 }

3

मुझे लगता है कि यह आपकी मदद कर सकता है

// 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 प्लगइन बनाने के बारे में एक लेख साझा किया था। मुझे लगता है कि आपको यह देखना चाहिए कि http://mycodingtricks.com/jquery/how-to-create-your-own-jquery-plugin/


1

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

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

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

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

    ...
});

0

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

$.fn.myPlugin = function() {
    var el = $(this[0]);
    var args = arguments[0] || {};
    var callBack = arguments[1];
    .....
    if (typeof callback == 'function') {
        callback.call(this);
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.