Ostatnio w projekcie potrzebowałem prostego i wydajnego systemu pub/sub. Komunikacja powinna być „bezpośrednia” a nie iść przez konkretne elementy na stronie, w szczególności iż te elementy jeszcze nie istnieją i mogą w ogólnie nie powstać.
Chodziło o to by w odpowiednim momencie procesu ustalania punktów na mapie przekazywać informacje o wygenerowanych elementach do formularza. Na jednej akcji poinformowania o nowych elementach może się dziać wiele rzeczy – wygenerowanie HTML, odpytanie systemu zewnętrznego o dane czy też aktualizacja pól w formularzu, wszystko zależy od typu wiadomości jaka zostanie wygenerowana.
Dlatego też system zdarzeń w oparciu o jQuery był dla mnie nie do przyjęcia. Po pierwsze jest on za bardzo skomplikowany jak na to co chciałem osiągnąć po drugie nazewnictwo nie jest dla mnie przejrzyste, a kiedy rozmawiam z osobami i używam pub/sub a potem mówię, że chodzi o bind i trigger to się one gubią :) Dlatego chciałem coś prostego napisać co by przechowywało w zmiennej informacje o funkcjach pod danym kluczem a potem wywoływało metodę z parametrami – co nie jest naprawdę trudne.
Jednak nie było potrzebny pisania takiego rozszerzenia gdyż ono już istnieje. Zostało napisane przez twórcę Dojo i można je znaleźć tutaj. Jak popatrzycie na kod to naprawdę chyba nic prostszego nie można byłoby już napisać :)
Teraz kiedy jeżeli interesuje mnie zdarzenie zakończenia przeływu pracy wykonywanej na mapie rejestruje u siebie w kodzie funkcję:
$(document).ready(function() { $.subscribe('map/emissionPoint/added', function(emissionPoint, gridRef) { // kod }); });
Zaś osoby odpowiedzialne za mapę informują mnie o tym za pomocą:
$.publish('map/emissionPoint/added', [ emissionPoint, [ easting, northing ] ])
Po prostu zajebiste :) Ciekawi mnie dlaczego ludzie nie lubili/lubą javascript :)
Nie widzę za bardzo czym to się różni od bind/trigger, właśnie poza nazewnictwem:). W systemie zdarzeń jQuery podoba mi się to, że przekazywany jest właśnie obiekt zdarzenia, który sam w sobie można jakoś wykorzystać (choćby zostawić wywołanie e.preventDefault() subskrybentom, a domyślnie nie blokować wykonania domyślnych akcji).
A ludzie nie lubili/nie lubią javascript bo nie umieją z niego korzystać:). I traktują ten język jak wrednego potwora do ruszania divami. Ja się w nim zakochałem.
jest duzo szybsze, na najnowszych przegladarkach okolo 30 razy, zas na IE9… jakies 40/50 razy – napisalem teraz dest na $(document).bind i trigger, 10 000 razy, to samo dla publish.
Przekazywanie obiektu – jasne, to jest super sprawa z jQuery, ale jak tego absolutnie nie potrzebujesz to tez nie musisz tego robic. Mi to naprawde na nic jest potrzebne :)
Hehe dobry powod :) choc pamietam ze w 2001 roku naprawde fajne rzezy sie robilo z JS tylko ten IE … troche przeszkadzal. moze to jest tak samo powodem? W koncu nie mielismy wczesniej dobrych przegladarek, a jak juz byly to dla kazdej trzeba bylo pisac z osobna :/
Comments are closed.