Zadania i zdarzenia
Kiedy chcemy wrócić do poprzedniej karty, którą przeglądaliśmy
w naszej komórce, przydałby nam się przycisk "Wstecz",
niestety w telefonach zazwyczaj nie ma takiego przycisku.
Przyciskami służącymi do nawigacji są dwa klawisze znajdujące
się bezpośrednio poniżej wyświetlacza- po lewej i po prawej
stronie. Ten po prawej służy zwykle do przeskakiwania
"wstecz", a ten po lewej służy do przejścia do następnej
karty. Jak stworzyć takie "menu nawigacyjne" ? Otóż musimy
wpisać odpowiedni kod, który powie przeglądarce w aparacie, że
to właśnie naciśnięcie prawego przycisku przez użytkownika
powinno spowodować powrót do ostatnio oglądanego dokumentu.
Tak aby wiedziała ona, iż po zajściu zdarzenia, czyli
naciśnięciu klawisza nawigacyjnego, ma być wykonane zadanie,
czyli przekierowanie do innej karty wml. Proste prawda ?
Na tym właśnie
polega cały mechanizm zdarzeń i zadań, które są w wml
nowością. Nie jest ich jednak dużo- w wml`u występują
następujące zdarzenia;
- DO- czyli naciśnięcie przez użytkownika
jakiegoś klawisza (choć wcale nie musi to być klawisz
nawigacyjny)
- ONTIMER- po wczytaniu karty upłynęła
określona ilość czasu
- ONENTERBACKWARD- kiedy wczytujemy ostatnio
oglądaną kartę
- ONENTERFORWARD- kiedy przechodzimy do
jeszcze nie oglądanej karty
W wyniku
wystąpienia powyższych zdarzeń, mogą nastąpić zadania;
- GO- przekierowanie do innej karty
- PREV- przekierowanie do ostatnio oglądanej
karty
- NOOP- no operation, to zadanie zaniechania
wcześniej zaplanowanych operacji
- REFRESH- odśwież
<do> Może zacznę od deklaracji
funkcji klawiszy nawigacyjnych. Zazwyczaj ustala się, że lewy
przycisk to polecenie wyświetlenia następnej karty w
dokumencie, a prawy to "wstecz". Pierwszy z nich deklaruje się
za pomocą takiego fragmentu kodu:
<do type="accept"
label="Dalej"> <go
href="#karta2"/> </do>
gdzie
accept to oznaczenie lewego przycisku
nawigacyjnego ( prev- to prawy, możemy używać
także reset, options, help i delete). Wartość
atrybutu label, to oczywiście nic innego jak etykieta, czyli
napis określający nazwę przycisku na
wyświetlaczu. Analogicznie, określenie funkcji prawego
przycisku nawigacyjnego, będzie wyglądać następująco;
<do type="prev" name="Previous"
label="Wstecz"> <go
href="#karta1"/> </do>
W tym
przypadku drugą linijkę kodu, możemy zastąpić zadaniem
przekierowania do ostatnio oglądanej karty, czyli
<prev/> Bardzo przydatnym znacznikiem
wml, przydatnym przy tworzeniu menu nawigacyjnego jest
element
<template>
</template> Można za jego pomocą określić
funkcje jakiegoś klawisza dla wszystkich kart znajdujących się
w dokumencie. Przykładowy kod mógłby wyglądać;
<?xml
version="1.0"?> <!DOCTYPE wml PUBLIC
"-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml> <template> <do
type="prev" name="Previous"
label="Wstecz"> <prev/> </do> </template> <card
id="karta1" title="Pierwsza karta"> <p>Karta
1 ... <br/> <do type="accept"
label="Dalej"> <go
href="#karta2"/> </do> </p> </card> |
 |
<card id="karta2" title="Druga
karta"> <p>Karta 2 ... <br/> <do
type="accept" label="Dalej"> <go
href="#karta3"/> </do> </p> </card> |
 |
<card id="karta3" title="Trzecia
karta"> <p>Karta 3 ...<br/> ...i
ostatnia
:-) </p> </card> </wml>
|
 |
W powyższym przykładzie specjalnie użyłem emulatora Noki 6110,
gdyż Nokia 6150 inaczej interpretuje zdarzenie <do
type="accept" label="Dalej"> Dokładniej w lewym
rogu ekranu, zamiast wyświetlać napis "Dalej", pojawia się
"Options". Dopiero po jego wybraniu, możemy znaleźć nasz
"Dalej". Trochę to zamotane, ale pomocne, jeżeli na jednej
karcie oprócz menu nawigacyjnego znajdują się jakieś linki.
Ilustruje to poniższy przykład;
Po
naciśnięciu "Options" pojawia się menu: możemy albo wybrać
"Follow Link", czyli skierować przeglądarkę na kartę wskazaną
przez odnośnik, bądź "Dalej", czyli otworzyć następną kartę w
dokumencie.
<on
timer> Innym, bardzo przydatnym zdarzeniem
oprócz do jest ontimer. Używamy go w
sposób następujący;
<card id="karta1"
ontimer="#karta2"> <timer value="50"/> <!--
1 to 1/10 sekundy, wiec 50 to 5 sekund
--> <p> Za chwile zostanie wczytana inna
karta </p> </card> <card
id="karta2"> <p> To jest druga karta, wczytana
po uplywie czasu okreslonego w elemencie
time. </p> </card>
<onenterforward> Zdarzenie to
pozwala na określenie, jakie zadania mają zostać wykonane,
jeśli ktoś wchodzi na ta kartę, prosto z innej karty. Możemy
na przykład natychmiast przekierować go do następnej karty.
<card id="karta1"
onenterforward="#karta2"> <p><do type="accept"
label="Dalej"> <go
href="#karta2"/> </do></p> </card> <card
id="karta2"....
<onenterbackward> Tutaj z kolei
możemy określić co się będzie działo jeżeli ktoś "wdepnie" na
tą kartę wciskając przycisk Wstecz;
<wml> <template> <do
type="prev" name="Previous"
label="Wstecz"> <prev/> </do> </template>
<card
id="karta1" onenterbackward="#karta3"> <p>Karta
numer 1</p> <p><do type="accept"
label="Dalej"> <go
href="#karta2"/> </do></p> </card> <card
id="karta2"> <p>Karta numer
2</p> <p><do type="accept"
label="Dalej"> <go
href="#karta2"/> </do></p> </card> <card
id="karta3"> <p>wpadles na ta karte bo nacisnales
przycisk
Wstecz</p> </card> </wml>
|