pobierz
To znowu ja

Przedstawiam Wam moją nową klasę Tree. Służy ona do zarządzania strukturą drzewiastą.
Krótka charakterystyka:
Z założenie klasa miała operować na dowolnych danych: baza, pliki xml, system plików, itd. By to osiągnąć wprowadziłem interfejs, który każdy kto chce używać klasy musi zaimplementować. Klasa wówczas nie interesuje się skąd pochodzą dane. Ją interesuje tylko by dostać to co chce. W umieszczonym przykładzie załączyłem implementacje operujące na bazie oraz na zserializowanej tablicy zapisanej w pliku.
Całość oparta jest na ajaxie. Znaczy to, iż klasa nie generuje kodu html drzewka. Zadaniem klasy jest zwracanie xml'a, który reprezentuje potrzebne dane. Drzewo budowane jest po stronie klienta po odebraniu niezbędnych danych. Drzewo nie jest budowane w całości, ale dobudowywane jest na żądanie, czyli np: rozwijamy gałaź X, wówczas leci żądanie do serwera (przy pomocy ajaxa oczywiście), które prosi o dzieci dla gałęzi X. Gdy te dzieci dostaniemy to są dobudowywane.
Drzewo dostarcza standardowe akcje: usuwanie, edycja, dodawanie, checkbox, akcja po kliknięciu na gałąź.
Każdy może sobie sam zdefiniować, jakich akcji chce używać. Można definiować akcje globalnie dla całego drzewa, ale można też dla każdej gałęzi definiować oddzielne akcje. Czyli np: mowimy, że dla całego drzewa będzie akcja usuwania, ale dla gałęzi X nie pozwalamy na tę akcję.
Akcja checkboc może być przydatna np. do określania praw dla danych gałęzi.
Miejsce występowania akcji, tzn. czy mają być przed nazwą węzła, czy też po, można samemu określać.
Wywołanie akcji polega na:
- wysłaniu żądania na serwer z daną akcją
- serwer robi co ma robić i zwraca informacje czy sie powiodło
- jesli akcja na serwerze się powiodła, dopiero wówczas następuje wizualizacja u klienta.
Jest możliwość zapamiętywania stanu drzewa w sesji, dzięki czemu bo odswierzeniu strony, otrzymamy drzewo rozwinięte tak jak było przed odswierzeniem.
Serwer może zwracać komunikaty tekstowe lub też błędy. Obie te rzeczy zostaną wyświetlone dla klienta. W przykładzie co pokazalem, podczas usuwania gałęzi z drugiego drzewa, generowany jest testowy błąd, by pokazac jak to wygląda.
Skrypt do zarządania komunikatami ogranicza się do wywolania funkcji napisanej przez uzytkownika. Nie chcialem tutaj nikomu wchodzic w jego wlasne sposoby wyswietlania. Oczywiscie dołączony jest moj przykladowy sposob zarządzania komunikatami.
No to chyba wszystko. Zapraszam do testowania, używania i zgłaszania uwag.
edit:
Zapomnialem o najwazniejszym - zastosowanie:
Klasa przyda sie do wyswietlania drzewek i duzych i malych, ale jej plusy najbardziej widać będzie na duzych drzewach, gdzie nie trzeba będzie generować od razu calej struktury, a tylko to co jest w danej chwili potrzebne.
edit2
No to dowalilem dodatkowy interfejs do zarządzania prawami oraz akcjami. Teraz jak ktoś chce może definiować prawa i akcje wewnątrz pierwszego interfejsu, ale może również robić to w interfejsie specjalnie do tego stworzonym. Zaletą tego drugiego jest to, iż możemy raz napisac sterownik do zarządzania danymi w drzewie i wykorzystywać go bez zmian w roznych projektach. A jesli projekty będą roznily sie prawami, to bedzie mozna je bez problemu ustawic w drugim sterowniku.
W zalączonym przykladzie, pierwsze drzewo dziala po staremu, drugie natomiast wykorzystuje już interfejs praw i akcji.
Dorobilem również tryb debugMode, ktory umożliwia podejrzenie zwroconych danych przez serwer w przypadku, gdy xml bedzie bledny.
Pojawila się rownież ikona czekania.
edit3:
Mozliwosc definiowania ikon folderow dla wybranych węzłów oraz klasy css. Akurat mi bylo to potrzebne to dorobilem

edit4:
Z racji, ze w firmie uzywamy prototype do ajaxa, ustawilem przelacznik w drzewku, ktory mowi czy korzystac z advAjax czy prototype. Zmienie niewielkiej ulegl wiec Tree.js.
Na poczatku pliku jest zmienna ajaxLib, która trzeba odpowiednio ustawic by korzystac z danego liba.
Do drzewka dolaczony jest tylko advAjax 1.1. Pozatym na advAjax 2.0RC1 byly pewne problemy z rozpoznawaniem xml na FF.
edit:
Doszla mozliwość dodawania do każdego węzła dodatkowych parametrów, które będzie można odczytać później na stronie i wykorzystać do "niecnych" celów. U mnie w firmie drzewko jest dosc mocno eksploatowane i okazalo się, iż potrzeba takiego "bajeru" - to sie dorobilo

Nowe zmiany w paczce 1.2