ui-bind odkaz: každý príkaz, možnosť a atribút
<ui-bind> je prvok, ktorý sa vzťahuje na komandy na DOM, keď sa mení hodnota jeho trasy. Táto stránka uvádza, čo každá príkaz robí, možnosti, ktoré rozhodujú kedy to beží a atribúty, ktoré vyberajú ktorý prvok to mení.
Formát je config="command:expression;command:expression". Vo výraze je value hodnota cesty a element (aj el) je element, ktorý sa mení. Príkaz môže mať selektor (text .name:value ho aplikuje na elementy .name vnútri) a attr berie najprv názov atribútu (attr title:value).
Príkazy, ktoré menia element
| Príkaz | Čo robí |
|---|---|
text:expr | nastaví text; prázdna hodnota zobrazí text empty |
html:expr | nastaví vnútorné HTML (escapujte si ho sami) |
value:expr | nastaví hodnotu formulárového prvku |
title:expr, href:expr, src:expr | nastaví ten atribút |
attr name:expr | nastaví ľubovoľný atribút |
.class:expr | pridá triedu, keď je výraz pravdivý, a odstráni ju, keď je nepravdivý |
show:expr / hide:expr | pridá alebo odstráni triedu hidden |
visible:expr / invisible:expr | pridá alebo odstráni triedu invisible (element si ponechá miesto) |
checked:expr | označí alebo odznačí input vnútri |
disabled:expr / enabled:expr | zakáže alebo povolí prvky vnútri (input, select, textarea, button) a elementy ui-component vnútri |
required:expr | nastaví voľbu required elementov ui-component vnútri (obyčajného input sa nedotkne) |
template | vykreslí šablónu Tangular elementu (pozri recept o šablónach) |
exec:path / refresh:path | zavolá funkciu na tej ceste s hodnotou, cestou a elementom pri každom SET cesty bindera |
show a hide sa spustia ako prvé, potom visible a invisible a text, html a template ako posledné, aby bola viditeľnosť elementu známa už pri zápise obsahu. text, html a template sa zapisujú, iba kým je element viditeľný, pokiaľ nie je v tej istej konfigurácii forcerender:true: vtedy sa zapíšu aj pri skrytom elemente.
Voľby: kedy sa príkazy spustia
| Voľba | Čo robí | |
|---|---|---|
changes | preskočí aktualizáciu, keď je hodnota rovnaká ako posledná | |
strict | spustí sa iba vtedy, keď sa zmenila samotná cesta bindera, nie keď sa zmenila podriadená cesta (user.name nespustí binder user) | |
track:a,b | spustí sa iba vtedy, keď sa zmenila jedna z týchto ciest (binder user, ktorý sleduje user.name, ignoruje user.age); spustí sa znova pri každom SET sledovanej cesty, aj s rovnakou hodnotou | |
once | spustí sa raz a potom sa binder odstráni | |
check:path | zavolá funkciu na tej ceste s (value, path, element); príkazy sa spustia, iba keď vráti true | |
delay:ms | počká toľko milisekúnd a vykreslí raz, aj keď sa hodnota medzitým zmenila viackrát (100, keď nie je zadaná hodnota) | |
empty:text | text zobrazený namiesto prázdnej hodnoty (---, keď nie je zadaný text) | |
format:pattern | naformátuje hodnotu text, html, value, attr, title, href a src cez String.format | |
class:name | pridá túto triedu elementu ui-bind raz, po prvom vykreslení | |
assign:path | uloží inštanciu bindera na tú cestu | |
helpers:path | objekt na tej ceste poskytuje pomocníkov šablóny: s helpers:hh a hh = { shout: fn } môže šablóna použiť {{ value | shout() }} |
Atribúty: ktorý element sa mení
Predvolene príkazy menia element ui-bind. Tieto atribúty vyberú iný:
element="#target"ľubovoľný element stránky (selektor jQuery)child=".inner"element vnútriui-bindparent=".card"najbližší predok, ktorý vyhovuje
Cesta môže začínať ! (path="!user.nick"): binder potom ignoruje chvíle, keď je hodnota null alebo undefined. Názov príkazu môže tiež začínať ! alebo ~: predpona sa akceptuje a ignoruje, príkaz funguje ako bez nej.
Príslušné príkazy
- Používajte jeden atribút na príkaz:
title:valueaalt:valuenapíšte ako dva príkazy.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>jComponent</title>
<link rel="stylesheet" href="//cdn.componentator.com/spa.min@20.css" />
<script src="//cdn.componentator.com/spa.min@20.js"></script>
</head>
<body>
<ui-bind path="user.age" config="visible:value > 17" id="visible"><span>adult</span></ui-bind>
<ui-bind path="user.age" config="invisible:value > 17" id="invisible"><span>minor</span></ui-bind>
<ui-bind path="user.name" config="text:value;class:marked" id="classonce"></ui-bind>
<ui-bind path="user.name" config="text:(window.counter_changes = (window.counter_changes || 0) + 1) && value;changes" id="changes"></ui-bind>
<ui-bind path="user" config="text:(window.counter_strict = (window.counter_strict || 0) + 1);strict" id="strict"></ui-bind>
<ui-bind path="user" config="text:value.name;track:user.name" id="track"></ui-bind>
<ui-bind path="user.name" config="text:value;once" id="once"></ui-bind>
<ui-bind path="user.name" config="text:value;check:isready" id="check"></ui-bind>
<ui-bind path="user.name" config="exec:onname" id="exec"></ui-bind>
<ui-bind path="user.name" config="text:value;assign:binders.main" id="assign"></ui-bind>
<ui-bind path="!user.nick" config="text:value" id="notnull"></ui-bind>
<ui-bind path="user.name" config="text:value" element="#target" id="element"></ui-bind>
<div id="target"></div>
<ui-bind path="user.name" config="text:value" child=".inner" id="child"><b class="inner"></b></ui-bind>
<ui-bind path="user.name" config="text .a:value;text .b:value.toUpperCase()" id="selector"><i class="a"></i><i class="b"></i></ui-bind>
<ui-bind path="user.name" config="show:false;text:value;forcerender:true" id="force"></ui-bind>
<ui-bind path="user.name" config="show:false;text:value" id="noforce"></ui-bind>
<ui-bind path="user.admin" config="required:value;disabled:!value" id="flags"><input type="text" /></ui-bind>
<ui-bind path="user.admin" config="checked:value" id="checked"><input type="checkbox" /></ui-bind>
<ui-bind path="user.name" config="title+alt:value" id="clone"></ui-bind>
<ui-bind path="user" config="text:(window.counter_track = (window.counter_track || 0) + 1);track:user.name" id="track2"></ui-bind>
<ui-bind path="user.name" config="template;helpers:hh" id="helpers"><script type="text/html"><b>{{ value | shout() }}</b></script></ui-bind>
<ui-bind path="user.none" config="text:value;empty" id="emptydef"></ui-bind>
<ui-bind path="user.name" config="focus"><input type="text" id="f1" /></ui-bind>
<ui-bind path="user.name" config="!text:value" id="bang"></ui-bind>
<ui-bind path="user.name" config="~text:value" id="tilde"></ui-bind>
<ui-bind path="user.name" config="text:el.attr('id') + '/' + element.attr('id')" id="elvar"></ui-bind>
<div class="card"><ui-bind path="user.name" config="attr data-n:value" parent=".card" id="parentbind"></ui-bind></div>
<script>
window.hh = { shout: s => String(s).toUpperCase() };
window.isready = function(value, path, element) {
return value !== 'blocked';
};
window.exec_log = [];
window.onname = function() {
window.exec_log.push(Array.prototype.slice.call(arguments).map(a => typeof a === 'object' ? (a && a.nodeType ? 'element' : a && a.path ? 'path' : 'object') : String(a)).join('|'));
};
SET('user', { name: 'Ann', age: 30, admin: false });
</script>
</body>
</html>Upravte príklad a spustite ho. Beží v izolovanom ráme vo vašom prehliadači; na náš server sa nič neposiela.
Náhľad