[jQuery UI] Zamykanie okienka przy dialog(“destroy”)

2 02 2009

Ostatnio bawiąc się jQuery UI korzystałem duużo z ui.dialog :)

W moim dorastającym projekcie (może kiedyś więcej opowiem – to nie EL, Glassy Orange Board, ani Celestes ;) ) generuję okienka dynamicznie, czyli np:

$("<div/>").html("Hello world.").dialog({
title: "Hello!"
});

I tak mogę sobie bez nie potrzebnego “appendowania” wyświetlić UI.Dialog :)

Tak stworzone okienka zamykałem brutalnie: remove(), ponieważ dialog(“destroy”), jak i dialog(“close”) zostawiał śmiecie. Chciałem jednak, aby zamykanie okienka było animowane (parametry show i hide w funkcji dialog).

Postanowiłem więc napisać stworzyć prostą modyfikację funkcji destroy. Niestety nie udało mi się tak jej napisać, aby można było z niej korzystać bez podmieniania linijek w ui.dialog.js.

Tak więc oto zmodyfikowane “destroy”, które trzeba zamienić w linijkach ~150 – 165:

/*
 * jQuery UI Dialog "destroy" function modification.
 * Author: Informatic <infdevblog.wordpress.com>
 * Lines: ~150 - 165
 * ---
 * Now dialog("destroy") animates the "hide effect"
    of the dialog, and doesn't appends original element to body.
    Useable while generating dialogs dynamicaly.
 * ---
 * Do with it what you want... But when you use it,
    tell me about that if you can :]
 */  

destroy: function() {
	var th = this;
	(th.overlay && th.overlay.destroy());
	this.uiDialog.hide(this.options.hide, {}, "slow", function() {
		th.uiDialog.remove();
	});
}

Regards.
Inf.