jQuery: cambiar la opción del plugin después de llamado

Tengo un plugin hecho por mi cuenta para configurar algunas cosas al usar el diálogo de jquery-ui. En lugar de llamar:

$("#popup").dialog(options); 

Yo uso esto:

 $("#popup").dialogPlugin(options); 

Y dialogPlugin llamará .dialog(options) (después de hacer algunas cosas).

En mi complemento puedo modificar algunas funciones para los eventos del diálogo como este:

 var originalCloseFn = options.close; options.close = function() { //my own stuff. originalCloseFn(); }; 

El complemento funciona muy bien, pero después de un tiempo de uso, me di cuenta de que no podía cambiar las funciones de diálogo desde fuera del complemento de esta manera:

 $("#popup").dialog("option", "close", newFunctionOnClose); 

Si hago eso, el código que el complemento agregado a la función de cierre se perdería.

Así que agregué este código al principio de mi plugin:

 if (options == "option") { if (val == undefined) return _this.dialog("option", name); else return _this.dialog("option", name, val); } 

Ahora necesito cambiar la quinta línea de este código para cambiar realmente la opción de mi complemento, no de jquery-ui. (La opción de la función .dialogPlugin , no de .dialog ). Realmente no sé cómo puedo hacer eso. ¿Alguna idea por favor?

Editar

Sé que la pregunta no es muy clara y mi pobre inglés ya no me permite explicarme más, así que he hecho un pequeño ejemplo .

Lo que quiero es que en la séptima línea ( return $(this).dialog("option", name, val); ) en lugar de modificarlo (equivalente a optionsForJQuery.close ) modifique options.close . De esta forma evitaré alojar el comportamiento de los plugins.

prueba esto:

HTML:

  

JS:

 (function ($) { $.fn.dialogPlugin = function (options, name, val) { var // setter function close fnClose = null, // function when close fnMyClose = function() { alert("This is plugin's close behavior"); if (fnClose) fnClose(); }; if (options == "option") { if (name == "close" && $.isFunction(val)) { fnClose = val; val = fnMyClose; } } else { if (options.close) fnClose = options.close; options.close = fnMyClose; } return (name) ? $(this).dialog(options, name, val) //if var == 'undefined'is equal to not send parameters : $(this).dialog(options); }; })(jQuery); $("#popup").dialogPlugin({ close: function() { alert("This is user's first close behavior"); } }); $("#popup").dialogPlugin("option", "close", function() { alert("This is user's second close behavior"); }); 

EDITAR

O más simple y elegante:

 (function($){ var dialog_close = $.ui.dialog.prototype.close; $.ui.dialog.prototype.close = function() { var self = this; alert("This is plugin's close behavior"); dialog_close.apply(this, arguments); }; })(jQuery);