60.19.13.3.2. Komponenty s vnitřním stavem

Pokročilejším druhem jsou komponenty jenž mají vnitřní stav uložený v proměnných který je potřeba zachovat při přechodu na jinou stránku s toutéž komponentou. Základní otázkou je, jak a kde uchovávat tento stav (hodnoty proměnných). Jednou z možností jsou skrytá pole ve formuláři, či přidané parametry v URL cgi skriptu.

Použijeme-li pro uchovávání skrytá pole

<input type="hidden" name="stav_komponenty" value="$stav_komponenty"/>

<input type="hidden" name="stav_komponenty"
                     value="$stav_komponenty"/>

Na toto řešení jsou kladeny následující omezení:

Dopracujeme se tedy ka komponentám jenž jsou prezentovány dvěma funkcemi.

První z těchto funkcí, …_state_machine, ukládá stav do skrytých polí a je volána šablonou stránky na začátku pro zapsání skrytých polí do formuláře vytvářeného touto šablonou. V této funkci proběhnou též všechny výpočty jenž z původního stavu a parametrů předaných formulářem či URL spočtou stav nový jenž bude uložen do skrytého pole. Druhá, …_render, je volána v okamžiku kdy je třeba vykreslit komponentu.

Mají-li komponenty ovlivňovat hlavičku stránky, musí jejich výpočet proběhnout ještě před vypsáním této hlavičky. Šablona stránky pak musí spusti výpočet stavu komponent a výstup uložit do proměnné aby pak mohla být skrytá pole uložena do tšla stránky. Mají-li se komponenty ovlivňovat navzájem pak nastanou problémy s pořadím v jakém probíhají výpočty. Komponenta která ovlivňuje ostatní musí být spočtena před těmito komponentami.