Trenutno dejavna stran: start » sl » Interna dokumentacija » Razširitve DokuWikija (WvdS) » FluentUI (knjižnica oblikovalskega sistema) » FluentUI: reference komponent » FluentUI: TreeView — predstavitveni pregled » TreeView: Selection / Checkboxes

TreeView: Selection / Checkboxes

1. Pregled in namen

Stanje: [Live]. Vir: lib/plugins/wkfluentui/helper/widgets.php (izris tree()) in lib/plugins/wkfluentui/scripts/treeview.js (izpeljava starševskega stanja, tipke s puščicami). Referenca: DevExpress-ova checkbox-izbira drevesa (rekurzivna izpeljava stanja starš/otrok).

2. Predpogoji

osnovna pogodba TreeViewa že razumljena; vsako izbirljivo vozlišče potrebuje stabilno vrednost key.

3. Pojmi

Prikaz na odjemalcu proti resnici na strežniku: izpeljava starševskega stanja (indeterminate/aria-checked=„mixed“ pri delni izbiri) je čisti prikaz na odjemalcu, POST vsebuje le dejansko označena listna vozlišča — strežnik sam izračuna posledice za nadrejene skupine (isto pravilo kot pri tristanjnem potrditvenem polju, glej polja obrazca → Check box). Klik na starševsko potrditveno polje se kot ugodnost na odjemalcu kaskadno prenese v poddrevo; listi se kljub temu pošljejo posamično.

4. Prvi koraki

echo $widgets->tree([
    ['label' => 'de', 'key' => 'de', 'children' => [
        ['label' => 'wiki', 'key' => 'de:wiki', 'selected' => true],
        ['label' => 'blog', 'key' => 'de:blog'],
    ]],
], ['selection' => 'checkbox']);

Napačno: obravnavati starševsko stanje indeterminate kot lastno vrednost POST (glej odsek 7) — ali pričakovati, da je vozlišče brez key izbirljivo (brez key vozlišče ne izriše potrditvenega polja).

5. Uporaba

$opts['selection'] Primer uporabe
none (privzeto) čista navigacija, nespremenjeno vedenje
single izbirljivo natanko eno vozlišče — izriše radijski gumb na vozlišče (selectionName kot ime polja)
checkbox večkratna izbira — izriše potrditveno polje na vozlišče (<selectionName>[]), rekurzivna izpeljava starševskega stanja

6. API referenca

  • $opts['selection'] => 'none'|'single'|'checkbox' (ista zamisel vrednosti kot pri dataGrid()-u, prenesena na drevo). Pri aktivnem modelu izbire zunanji <ul> nosi role=„tree“, vsako vozlišče role=„treeitem“ + aria-level, skupinska vozlišča aria-expanded.
  • $opts['selectionName'] (privzeto tree-selection): ime polja obrazca — single pošlje eno vrednost radijskega gumba, checkbox niz []. Ključ vozlišča selected (bool) nastavi predizbiro.
  • checkbox: starševsko stanje se izpelje rekurzivno iz otrok — vsi otroci označeni → starš označen, noben označen → neoznačen, delno označeni → indeterminate + aria-checked=„mixed“ (scripts/treeview.js).
  • Tipkovnica: puščici gor/dol se premikata med vidnimi vozlišči, puščici desno/levo odpreta/zapreta skupino; samo potrditveno polje se preklopi z nativno preslednico.

7. Parametri, možnosti in stanja

Ključ Tip Pomen
$opts['selection'] 'none'|'single'|'checkbox' model izbire, glej odseka 5/6
$opts['selectionName'] string ime polja obrazca, privzeto tree-selection
key vozlišča string stabilna vrednost potrditvenega polja/radijskega gumba — obvezno za izbirljiva vozlišča
selected vozlišča bool predizbira ob izrisu

Rezervni način brez JS: vsako potrditveno polje je neodvisno polje obrazca znotraj klicateljevega obdajajočega <form> (tako kot pri dataGrid() Selection) — izpeljava starševskega stanja je čisti prikaz na odjemalcu, izbira se v celoti pošlje brez JavaScripta.

Vedenje ob napaki (zavezujoče): indeterminate se ne sme obravnavati kot lastna vrednost POST — strežnik vidi le dejansko označena listna vozlišča in sam izpelje posledice za skupine.

8. Popolni primeri

echo '<form method="post" action="' . hsc(wl($ID)) . '">';
formSecurityToken();
echo $widgets->tree($drevoImenskihProstorov, [
    'selection'     => 'checkbox',
    'selectionName' => 'vidni-ns',
]);
echo '<button type="submit" class="wk-btn wk-btn--primary">Uveljavi</button></form>';

9. Omejitve in robni primeri

  • Vozlišče brez key ne izriše kontrolnika izbire (namerno — sicer bi se pošiljale nesmiselne vrednosti).
  • single uporablja nativno semantiko radijskih gumbov — „preklic izbire na nič„ potrebuje klicateljev lasten prazen radijski gumb.

10. Dostopnost in združljivost

Celoten pregled: Accessibility.

11. Odpravljanje težav

Simptom: starševsko potrditveno polje nikoli ne prikaže mešanega stanja.

Vzrok: JavaScript ni aktiven (mešano stanje je lastnost DOM, ne atribut) — ali pa podrejena potrditvena polja ne ležijo znotraj istega poddrevesa <details>.

Rešitev: preveriti vedenje z aktivnim JavaScriptom; strukturo drevesa gnezditi prek children namesto ploskega izrisa.

12. Sorodne teme

sl/wiki/dwe/wkfluentui/component/treeview/selection-checkbox.txt · Zadnja sprememba: uporabnika 0.0.0.0