Tree List: Expand/Collapse
Nazaj: predstavitveni pregled
1. Pregled in namen
Stanje: [Live].
2. Predpogoji
osnovna pogodba
Tree Lista že razumljena (expanded/childrenKey).
3. Pojmi
Dualizem odjemalec/strežnik, tako kot pri razvrščanju:
$opts['expandUrl'] ponuja rezervni način brez JS (analogno
sortUrl-u pri dataGrid()
Sorting-u); ob prisotnem JavaScriptu scripts/treelist.js prevzame
razširjanje/strnjevanje na strani odjemalca, brez ponovnega nalaganja
strani.
4. Prvi koraki
$expandUrl = static fn (string $key, bool $expand) => wl($ID, ['toggle' => $key, 'x' => $expand ? 1 : 0]); echo $widgets->treeList($columns, $rows, [ 'rowKey' => 'id', 'expanded' => $_SESSION['treelist_expanded'] ?? [], 'expandUrl' => $expandUrl, ]);
5. Uporaba
| Potreba | Vzorec |
|---|---|
| Razširiti/strniti posamezno vrstico | expandUrl na vrstico |
| Vse vrstice naenkrat | gumbi orodne vrstice „Razširi vse„/„Strni vse“ (odsek 6) |
6. API referenca: osnova brez JS
Vsaka nadrejena vrstica nosi vidno povezavo za
razširjanje/strnjevanje (.wk-treelist__toggle, ▶/▼, z
dinamičnim aria-label „razširi„/„strni“) v svojem prvem stolpcu:
$opts['expandUrl'](string $key, bool $expand) priskrbi
strežniški URL, ki posodobi $opts['expanded'] za naslednji
izris.
Razširi vse / strni vse: expandUrl se samodejno izriše kot
orodna vrstica nad seznamom (klic toolbar()), gumbi pokličejo isti
callable s psevdoključema *all oziroma *none; strežnik
nastavi expanded na vse ključe nadrejenih vrstic oziroma na prazno
polje. To so navadne povezave, brez posebnega primera glede na posamezno
vrstico.
Plast odjemalca (scripts/treelist.js): že izrisana
(strežniško razširjena) poddrevesa se na strani odjemalca strnejo in
ponovno razširijo brez ponovnega nalaganja (atribut hidden,
sinhronizacija aria-expanded); razširjanje strežniško strnjene
vrstice še vedno sledi povezavi — njeni otroci so namerno odsotni iz DOM
(meja izrisa iz
osnove).
7. Parametri, možnosti in stanja
| Ključ | Tip | Pomen |
|---|---|---|
$opts['expandUrl'] | callable (string $key, bool $expand): string | povezava za preklop na nadrejeno vrstico; psevdoključa *all/*none za skupinske gumbe |
$opts['expanded'] | array | razširjene vrednosti rowKey (strežniško stanje, npr. seja) |
8. Popolni primeri
Glej odsek 4; obravnavalnik zaslona posodobi expanded iz parametra
toggle/x (oziroma nastavi vse/nobenega pri
*all/*none) in znova izriše.
9. Omejitve in robni primeri
- Strnjevanje na strani odjemalca je čisto vizualno — strežniško stanje (
expanded) se spremeni šele prek povezav; po ponovnem nalaganju spet velja strežniško stanje.
10. Dostopnost in združljivost
Preklop za razširjanje/strnjevanje je nativna, fokusirljiva povezava z
dinamičnim aria-label — upravljanje s tipkovnico in bralnikom zaslona
deluje brez dodatne kode; aria-expanded na vrstici sledi stanju.
11. Odpravljanje težav
Simptom: „Razširi vse„ deluje, vendar se posamezne vrstice po ponovnem nalaganju znova strnejo.
Vzrok: obravnavalnik zaslona ne shrani expanded trajno (npr.
pozabljena seja).
Rešitev: shraniti expanded na strani strežnika in ga posredovati
pri izrisu (odsek 4).
12. Sorodne teme
- predstavitveni pregled — vsaka kategorija
- DataGrid: sorting — vzor za dualizem odjemalec/strežnik