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 KOMENTARZE

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

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