Polecam

.NET Blogs PL
CodeGuru


Publish/Subscribe w JavaScript

March 31, 2011 in categories: pro by Gutek

3

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 :)




 

 

 

2 comments for "Publish/Subscribe w JavaScript"

  1. Procent
    Procent Says:

    Nie widzę za bardzo czym to się różni od bind/trigger, właśnie poza nazewnictwemSmile. 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ćSmile. I traktują ten język jak wrednego potwora do ruszania divami. Ja się w nim zakochałem.

  2. Gutek
    Gutek Says:

    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 Smile

    Hehe dobry powod Smile 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

© 2008-2010 Jakub Gutkowski. Powered by BlogEngine.NET 1.5.1.14. Hosted on OrcsWeb.

Design