Ponavljanje (niz) možnosti

Včasih želite ponoviti nabor možnosti za poljubno število elementov. Npr. Recimo, da želite implementirati vtičnik za razvrščanje data.frame. Morda boste želeli dovoliti razvrščanje po poljubnem številu stolpcev (v primeru izenačenja med prvimi stolpci). To bi lahko preprosto realizirali tako, da bi uporabniku omogočili izbiro več spremenljivk v <varslot> s multi="true". Če pa želite to razširiti, npr. omogoča uporabniku, da za vsako spremenljivko določi, ali naj se pretvori v znakovno/številsko ali naj bo razvrščanje naraščajoče ali padajoče, potrebujete več prilagodljivosti. Drugi primeri bi bili risanje več črt v enem izrisu (ki omogoča izbiro predmeta, sloga črte, barve črte itd. za vsako črto) ali določanje preslikave za ponovno kodiranje iz niza starih vrednosti v nove vrednosti.

Vnesite <optionset>. Najprej si poglejmo preprost primer:

<dialog [...]>
        [...]
        <optionset id="set" min_rows="1">
                <content>
                        <row>
                                <input id="firstname" label="Given name(s)" size="small">
                                <input id="lastname" label="Family name" size="small">
                                <radio id="gender" label="Gender">
                                        <optioncolumn label="Male" value="m"/>
                                        <optioncolumn label="Female" value="f"/>
                                </radio>
                        </row>
                </content>

                <optioncolumn id="firstnames" label="Given name(s)" connect="firstname.text">
                <optioncolumn id="lastnames" label="Family name" connect="lastname.text">
                <optioncolumn id="gender" connect="gender.string">
        </optionset>
        [...]
</dialog>
                

Tukaj smo ustvarili uporabniški vmesnik za določanje števila oseb (npr. avtorjev). Uporabniški vmesnik zahteva vsaj en vnos (min_rows="1"). Znotraj elementa <optionset> začnemo z določitvijo <content>, tj. tiste elemente, ki pripadajo naboru možnosti. Seznanjeni boste z večino elementov znotraj <content>.

Nato določimo zanimive spremenljivke, ki jih bomo želeli prebrati iz nabora možnosti v naši datoteki JS. Ker bomo imeli opravka s poljubnim številom postavk, ne moremo samo brati getString ("ime") v JS. Namesto tega za vsako vrednost, ki nas zanima, določimo <optioncolumn>. Za prvi stolpec možnosti v primeru <connect="firstname.text"> pomeni, da se vsebina elementa <input> bere za vsak predmet. <optioncolumn>, za katere je podana label, bodo prikazani na zaslonu v stolpcu s to oznako. V JS lahko zdaj pridobimo imena za vse avtorje z uporabo getList("set.firstname"), getList("set.lastnames") za družinska imena, in getList("set.gender") za matriko nizov "m"/"f".

Upoštevajte, da ni nobenih omejitev glede tega, kaj lahko postavite znotraj <optionset>. Uporabite lahko celo vdelane komponente. Tako kot pri katerem koli drugem elementu je vse, kar morate storiti, zbrati izhodne spremenljivke, ki vas zanimajo, v specifikaciji <optioncolumn>. V primeru vdelanih vtičnikov je to pogosto del lastnosti "code". Npr.:

<dialog [...]>
        [...]
        <optionset id="set" min_rows="1">
                <content>
                        [...]
                        <embed id="color" component="rkward::color_chooser" label="Color"/>
                </content>

                [...]
                <optioncolumn id="color_params" connect="color.code.printout">
        </optionset>
        [...]
</dialog>
                

Seveda lahko uporabite tudi logiko uporabniškega vmesnika znotrajnabora možnosti. Obstajata dve možnosti za to: To lahko storite tako, da nareditepovezavo (ali skript) v glavnem <logic>razdelku vtičnika, kot običajno. Vendar boste dostopali do elementov uporabniškega vmesnikav območju vsebine kot (npr.) "set.contents.firstname.XYZ". Upoštevajtepredpono "set" (id, ki ste ga dodelili nizuin "vsebina"). Lahko pa dodate ločeno <logic> kot podrejeni element vašega nabora <optionset>. V tem primeru bodo id bodo naslovljeni glede na področje vsebine, npr. "firstname.XYZ". Samo element <script> ni dovoljeno v logičnem delu nabora možnosti. Če želite uporabiti skripte, boste morali uporabiti razdelek glavne <logike> vtičnika.

Opomba

Pri skriptni logiki v naboru možnosti je vse, kar lahko storite, dostop do trenutne current regije vsebine. Tako je običajno samosmiselno povezati elemente znotraj območja vsebine med seboj.Povezovanje lastnosti zunaj <optionset> aznotraj področja vsebine, je lahko uporabna za inicializacijo.Vendar bo spreminjanje območja vsebine po inicializacijine velja za postavke, ki jih je uporabnik že definiral.Samo na trenutno izbrani artikel v zbirki.

Poganjane zbirke možnosti

Doslej smo obravnavali <optionset>, kiponuja gumbe za dodajanje/odstranjevanje elementov. Vendar v nekaterih primerih jeveliko bolj naravno izbiranje elementov zunaj <optionset> in nudijo le možnosti za prilagajanje nekaterih vidikov vsakega elementav <optionset>. Npr. recimo, da želite dovolitiuporabnik izriše več objektov znotraj ene ploskve. Za vsak predmet uporabnikmora imeti možnost določiti barvo črte. To bi lahko rešili tako, da postavite <varselector> in <varslot> znotraj <content> območja, ki uporabniku omogoča izbiro enega elementa naenkrat. Vendar pa bi pomenilo veliko manj klikov za uporabnika, če uporabite <varslotmulti="true"> zunajNamesto tega <optionset>. Potem boste to povezaliizbiranje predmetov v tako imenovanem "pognanem" naboru možnosti. Takole:

<dialog [...]>
        <logic>
                <connect client="set.vars" governor="vars.available"/>
                <connect client="set.varnames" governor="vars.available.shortname"/>
        </logic>
        [...]
        <varselector id="varsel"/>
        <varslot id="vars" label="Objects to plot"/>
        <optionset id="set" keycolumn="var">
                <content>
                        [...]
                        <embed id="color" component="rkward::color_chooser" label="Line color"/>
                </content>

                [...]
                <optioncolumn id="vars" external="true">
                <optioncolumn id="varnames" external="true" label="Variable">
                <optioncolumn id="color_params" connect="color.code.printout">
        </optionset>
        [...]
</dialog>
                

Začeli bomo gledati primer na dnu. Opazili boste, da dvaSpecifikacije <optioncolumn> imajoexternal="true". To pove RKWard da so te možnosti <optionset> nadzorovane od zunaj. Tukaj je edini namen stolpca z možnostmi "varnames" zagotoviti enostavno branje oznake na zaslonu nabora možnosti (povezan je s "kratkim imenom" modifikatorjem lastnosti, ki vsebuje izbrane predmete). Namen"vars"-optioncolumn naj služi kot "ključni" stolpec, kot določa<optionset keycolumn="vars"...>. To pomeni da bo za vsak vnos na tem seznamu nabor ponudil en nabor možnosti in možnosti so logično povezane s temi vnosi. Ta stolpec je povezan z lastnostjo, ki vsebuje izbrane predmete v <varslot>. To je za vsak predmet, ki je tam izbran,<optionset> omogoča določitev barve črte.

Opomba

Zunanji stolpec je mogoče tudi povezatiz lastnostmiznotraj območja <content>. Vendar pa jepomembno je omeniti, da se stolpce možnosti deklarirane external="true" nikoli ne sme spreminjati znotraj <optionset> in deklarirani stolpci možnosti external="false" (privzeto) nikoli ne smejo bitispremenjeni zunaj <optionset>.

Alternative: Kdaj ne uporabljati naborov možnosti

Nabori možnosti (optionsets) so močno orodje, vendar lahko včasih naredijo več škode kotkoristi, saj dodajajo precejšnjo kompleksnost, tako z vidika razvijalca vtičnika kot z vidika uporabnika. Torej dvakrat premislite pri njihovi uporabi. Tukaj je nekaj nasvetov:

  • Za nekatere preproste primere lahko element <matrix> nudi uporabno lahkotno alternativo.

  • Naj vaš vtičnik ne naredi preveč. Navedli smo primer uporabe za nabor možnosti za vtičnik za risanje več črt znotraj ene risbe. Ampak na splošno ni dobra ideja ustvariti vtičnika, ki bo ustvaril posamezne ploskveza vsak element v naboru možnosti. Raje naj vtičnik ustvari eno ploskev in uporabnik ga lahko pokliče večkrat.

  • Če ne pričakujete več kot dva ali tri predmete v kompletu, razmislite o ponavljanju možnosti, namesto tega kar ročno.