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