[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.





[jQuery] Nie do końca “onload”

27 01 2009

Przed chwilę zauważyłem rzecz, która może się przydać innym.
Gdy wykonujemy w jQuery kod typu:

$(function() {
[..]
});

Kod “[..]” jest wykonany po załadowaniu DOM’u (nie dziwne ;) ). A obrazki? Obrazki mogą się ładować. DOM jest załadowany i już. Obrazki nie należą do DOM’u, więc event DOMReady jest wykonywany przed załadowaniem obrazków…

…więc jeżeli chcesz wykonać jakiś kod po 100% załadowaniu strony (włącznie z obrazkami, iframe’ami, itp.), skorzystaj z:

$(window).load(function() {
[...]
});

Wtedy kod “[...]” zostaje wykonany po załadowaniu całego dokumentu, nie tylko DOM’u :)

@edit: Tak.. Wiem.. Dopiero niedawno zauważyłem, że to samo jest napisane w dokumentacji jQuery :D





[jQuery] JSON przez POST.

14 01 2009

Oficjalnie oznajmiam – nadal żyję ;) Tak więc witam po przerwie. Była ona spowodowana oczywiście szkołą. Musiałem się zacząć trochę częściej uczyć ;)

Podczas tej przerwy, trochę się działo.. na przykład załóżyłem pierwszą swoją Vallherynkę, na silniku Santic Engine. Już mamy (ja ze znajomym[i] :D ) 34 graczy. Szpaaan xD

Poza tym, zacząłem robić (następną..) graficzną grę MMORPG – od zera oczywiście. Chodzisz ludzikiem, zabijasz potwory, taakie tam :) Z tej okazji napisałem prostą bibliotekę JS (prawdopodobnie ją udostępnię niedługo :D )do animacji sprite’ów (kto nie wie co to jest, odsyłam do Wikipedii) ułożonych w rzędy i kolumny na jednym obrazku.

Przy okazji robienia tej gry, zauważyłem, że jQuery nieposiada funkcji do szybkiego (chodzi mi tu o krótki zapis, tak jak getJSON) wywołania zapytania serwera o dane JSON. Więc napisałem baardzo prosty dodatek do jQuery implementujący funkcję postJSON

/*
 * jQuery postJSON plugin.
 * Do with it what you want.
 */

jQuery.postJSON = function(u,d,callback) {
 return jQuery.post(u, d, callback, "json");
}

Bye.