Estoy tratando de darle la funcionalidad de devolución de llamada de mi complemento y me gustaría que funcione de una manera algo tradicional:
myPlugin({options}, function() {
/* code to execute */
});
o
myPlugin({options}, anotherFunction());
¿Cómo manejo ese parámetro en el código? ¿Se trata como una entidad completa? Estoy bastante seguro de saber dónde colocaría el código de ejecución, pero ¿cómo hago para ejecutar el código? Parece que no puedo encontrar mucha literatura sobre el tema.
()
Respuestas:
Simplemente ejecute la devolución de llamada en el complemento:
$.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 } };
También puede tener la devolución de llamada en el objeto de opciones:
$.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); };
Úselo así:
$('.elem').myPlugin({ callback: function() { // some action } });
fuente
$('.elem').myPlugin({ callback: function (param) { // some action } });
options.callback.call(this, param);
animateBefore
yanimateAfter
. por favor dime cómo usar tu soluciónNo sé si entiendo correctamente tu pregunta. Pero para la segunda versión: esto llamaría de
anotherFunction
inmediato.Básicamente, su complemento debería ser algún tipo de función que se vea así:
var myPlugin = function(options, callback) { //do something with options here //call callback if(callback) callback(); }
Debe proporcionar un objeto de función como devolución de llamada, por lo que
function(){...}
oanotherFunction
(sin()
).fuente
Recuperando una explosión del pasado.
Vale la pena señalar que si tiene dos argumentos pasados, por ejemplo:
$.fn.plugin = function(options, callback) { ... };
Luego, llama al complemento sin el argumento de opciones, pero con una devolución de llamada, se encontrará con problemas:
$(selector).plugin(function() {...});
Utilizo esto para hacerlo un poco más flexible:
if($.isFunction(options)) { callback = options }
fuente
Creo que esto podría ayudarte
// 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 );
Había compartido un artículo sobre la creación de su propio complemento jQuery. Creo que debería comprobar que http://mycodingtricks.com/jquery/how-to-create-your-own-jquery-plugin/
fuente
Cambie la función de su complemento para tomar un segundo parámetro. Suponiendo que el usuario pasa una función, ese parámetro puede tratarse como una función normal.
Tenga en cuenta que también puede hacer que la devolución de llamada sea una propiedad del parámetro de opciones.
Por ejemplo:
$.fn.myPlugin = function(options, callback) { ... if(callback) //If the caller supplied a callback callback(someParam); ... });
fuente
Un ejemplo un poco tarde, pero puede ser útil. El uso de argumentos puede crear la misma funcionalidad.
$.fn.myPlugin = function() { var el = $(this[0]); var args = arguments[0] || {}; var callBack = arguments[1]; ..... if (typeof callback == 'function') { callback.call(this); } }
fuente