Wiele aplikacji używa kreatorów aby pomóc użytkownikowi przejść złożone zadania. XUL dostarcza łatwego sposobu na tworzenie kreatorów
Kreator
Kreator jest specjalnym typem okna dialogowego, które zawiera kilka stron. Na dole tego okna dialogowego pojawiają się przyciski nawigacyjne do przełączania między stronami. Kreatory są zazwyczaj używane do pomocy użytkownikom przy wykonywaniu złożonych zadań. Każda strona zawiera pojedyncze pytanie lub zbiór powiązanych pytań. Po ostatniej stronie jest wykonywane działanie XUL dostarcza elementu wizard który może być użyty do stworzenia kreatora.
Zawartość wewnątrz elementu
obejmuje całą zawartość każdej strony kreatora. Atrybutu umieszczone w wizard
są używane do sterowania nawigacją kreatora. Kiedy tworzymy kreator, użyjemy znacznika wizard
zamiast znacznika wizard
.window
Zauważ, że kreatory obecnie pracują poprawnie z chrom URL.
Kreator składa się składa się z kilku sekcji, chociaż dokładny rozkład będzie różny dla każdej platformy. Kreator będzie generalnie wyświetlany jak te na platformie użytkownika. Typowy rozkład będzie obejmował tytuł na górze, zbiór przycisków nawigacyjnych na dole i zawartość strony po środku.
Tytuł u góry jest stworzony przy zastosowaniu atrybutu
, podobnie jak robi się to w zwykłym oknie. Przyciski nawigacyjne są tworzone automatycznie. Strony kreatora są tworzone przy użyciu elementu title
. Możesz umieścić jakąkolwiek zawartość jaką chcesz wewnątrz każdego wizardpage
.wizardpage
Przykład kreatora
<?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <wizard id="example-window" title="Select a Dog Wizard" xmlns="https://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <wizardpage> <description> This wizard will help you select the type of dog that is best for you." </description> <label value="Why do you want a dog?"/> <menulist> <menupopup> <menuitem label="To scare people away"/> <menuitem label="To get rid of a cat"/> <menuitem label="I need a best friend"/> </menupopup> </menulist> </wizardpage> <wizardpage description="Dog Details"> <label value="Provide additional details about the dog you would like:"/> <radiogroup> <caption label="Size"/> <radio value="small" label="Small"/> <radio value="large" label="Large"/> </radiogroup> <radiogroup> <caption label="Gender"/> <radio value="male" label="Male"/> <radio value="female" label="Female"/> </radiogroup> </wizardpage> </wizard>
Ten kreator ma dwie strony, jedną z menu rozwijanym i drugą ze zbiorem przycisków opcji. Kreator będzie sformatowany automatycznie, z tytułem na górze i zbiorem przycisków na dole. Użytkownik może nawigować pomiędzy stronami kreatora przyciskami Wstecz oraz Dalej. Przyciski te włączają się i wyłączają same w odpowiedniej chwili. Dodatkowo na ostatniej stronie pojawia się przycisk Zakończ. Wszystko to jest automatyczne, więc nie musisz robić niczego aby manipulować stronami.
Atrybut
może opcjonalnie umieścić element description
dostarczający podnagłówków dla tej strony. W powyższym przykładzie będzie umieszczony na drugiej stronie, ale nie na pierwszej.wizardpage
Obsługa zmian strony
Generalnie chcesz zrobić coś po tym jak naciśniesz przycisk Zakończ. Możesz ustawić atrybut onwizardfinish
w elemencie
aby to wykonać. Ustaw go w skrypcie który wykonuje jakieś zadanie jakie chcesz a potem zwraca prawdę. Ten skrypt może być używany do zapisania informacji, jaką użytkownik wprowadził podczas pracy z kreatorem.wizard
<wizard id="example-window" title="Select a Dog Wizard" onwizardfinish="return saveDogInfo();" xmlns="https://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
Kiedy użytkownik nacisnął przycisk Zakończ, będzie wywołana funkcja saveDogInfo()
, będąca zdefiniowaną w pliku skryptu zapisującym informację jaka została wprowadzona. Jeśli funkcja zwraca true
, kreator zostanie zamknięty. Jeśli zwróci false
, wtedy kreator się nie zamknie, co może wystąpić, jeśli funkcja saveDogInfo()
napotka niepoprawną daną wejściową, na przykład.
Są również powiązane atrybuty
, onwizardback
i onwizardnext
, które są wywoływane, kiedy są naciśnięte przyciski Wstecz, Dalej i Anuluj. Te funkcje są wywoływane bez względu na to jaka strona jest aktualnie wyświetlana.onwizardcancel
Aby mieć różny kod wywoływany w zależności od strony na jakiej jesteś, użyj atrybutów
lub onpagerewound
w elemencie onpageadvanced
. Pracują one podobnie do innych funkcji z wyjątkiem tego, że możesz użyć różnego kodu dla każdej strony. Pozwala Ci to sprawdzenie poprawności wprowadzonych danych wejściowych zanim użytkownik będzie kontynuował.wizardpage
Trzecią metodą jest zastosowanie atrybutów
i onpagehide
w elemencie onpageshow
. Będą one wywoływane kiedy strona jest ukrywana lub pokazywana bez względu na to jaki przycisk naciśnięto (z wyjątkiem, kiedy naciśnięto przycisk Anuluj -- musisz użyć wizardpage
, aby to sprawdzić).onwizardcancel
Te trzy metody powinny dostarczyć dosyć elastyczności dla obsługi nawigacji jakiej potrzebujemy. Poniżej mamy podsumowanie funkcji atrybutów, które są wywoływane, kiedy użytkownik naciśnie Dalej, w porządku, w jakim będą sprawdzane. Jeśli tylko jedna zwróci false
, nawigacja zostaje przerwana.
Atrybuty | Miejsce na znacznik | Moment wywoływana |
---|---|---|
pagehide | wizardpage | Wywoływana na stronie, którą użytkownik opuszcza. |
pageadvanced | wizardpage | Wywoływana na stronie opuszczonej przez użytkownika. |
wizardnext | wizard | Wywoływana w kreatorze. |
pageshow | wizardpage | Wywoływana na stronie, którą użytkownik wpisał. |
Podobny proces wystąpi dla przycisku Wstecz.
return funcName()
zamiast samego wywołania funcName()
Nie będzie to działało jak oczekiwano np.
<wizardpage pageadvanced='return funcName()'></wizardpage></code>
W kolejnym artykule, zobaczymy kilka dodatkowych możliwości kreatorów.