ForgejComponent
cs

jComponent

Ui-bind reference: každý příkaz, možnost a atribut

jComponent 20 · jcomponent@20 jcomponentfrontendbindingreference Spuštěno s jComponent 20

<ui-bind> je prvek, který aplikuje příslušenství na DOM, když se hodnota jeho trasy mění.Tato stránka uvádí, co každý příkaz dělá, možnosti, které rozhodují kdy běží a atributy, které vyberou který prvek se mění

Formát je config="command:expression;command:expression". Ve výrazu je value hodnota cesty a element (také el) je element, který se mění. Příkaz může mít selektor (text .name:value jej aplikuje na elementy .name uvnitř) a attr bere nejprve název atributu (attr title:value).

Příkazy, které mění element

PříkazCo dělá
text:exprnastaví text; prázdná hodnota zobrazí text empty
html:exprnastaví vnitřní HTML (escapujte si je sami)
value:exprnastaví hodnotu formulářového prvku
title:expr, href:expr, src:exprnastaví ten atribut
attr name:exprnastaví libovolný atribut
.class:exprpřidá třídu, když je výraz pravdivý, a odstraní ji, když je nepravdivý
show:expr / hide:exprpřidá nebo odstraní třídu hidden
visible:expr / invisible:exprpřidá nebo odstraní třídu invisible (element si ponechá místo)
checked:exprzaškrtne nebo odškrtne input uvnitř
disabled:expr / enabled:exprzakáže nebo povolí prvky uvnitř (input, select, textarea, button) a elementy ui-component uvnitř
required:exprnastaví volbu required elementů ui-component uvnitř (prostého input se nedotkne)
templatevykreslí šablonu Tangular elementu (viz recept o šablonách)
exec:path / refresh:pathzavolá funkci na té cestě s hodnotou, cestou a elementem při každém SET cesty bindera

show a hide se spustí jako první, pak visible a invisible a text, html a template jako poslední, aby byla viditelnost elementu známa už při zápisu obsahu. text, html a template se zapisují, jen dokud je element viditelný, pokud není ve stejné konfiguraci forcerender:true: pak se zapíší i při skrytém elementu.

Volby: kdy se příkazy spustí

VolbaCo dělá
changespřeskočí aktualizaci, když je hodnota stejná jako poslední
strictspustí se jen tehdy, když se změnila samotná cesta bindera, ne když se změnila podřízená cesta (user.name nespustí binder user)
track:a,bspustí se jen tehdy, když se změnila jedna z těchto cest (binder user, který sleduje user.name, ignoruje user.age); spustí se znovu při každém SET sledované cesty, i se stejnou hodnotou
oncespustí se jednou a poté se binder odstraní
check:pathzavolá funkci na té cestě s (value, path, element); příkazy se spustí, jen když vrátí true
delay:mspočká tolik milisekund a vykreslí jednou, i když se hodnota mezitím několikrát změnila (100, když není zadána hodnota)
empty:texttext zobrazený místo prázdné hodnoty (---, když není zadán text)
format:patternnaformátuje hodnotu text, html, value, attr, title, href a src přes String.format
class:namepřidá tuto třídu elementu ui-bind jednou, po prvním vykreslení
assign:pathuloží instanci bindera na tu cestu
helpers:pathobjekt na té cestě poskytuje pomocníky šablony: s helpers:hh a hh = { shout: fn } může šablona použít {{ valueshout() }}

Atributy: který element se mění

Výchozně příkazy mění element ui-bind. Tyto atributy vyberou jiný:

  • element="#target" libovolný element stránky (selektor jQuery)
  • child=".inner" element uvnitř ui-bind
  • parent=".card" nejbližší předek, který vyhovuje

Cesta může začínat ! (path="!user.nick"): binder pak ignoruje okamžiky, kdy je hodnota null nebo undefined. Název příkazu může také začínat ! nebo ~: předpona se akceptuje a ignoruje, příkaz funguje jako bez ní.

Příslušné příkazy

  • Používejte jeden atribut na příkaz: title:value a alt:value napište jako dva příkazy.
public/index.html
<!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>
Vyzkoušejte to ve svém prohlížeči

Upravte příklad a spusťte ho. Běží v izolovaném rámu ve vašem prohlížeči; na náš server se nic neposílá.

Náhled