ForgejComponent
nl

jComponent

ui-bind referentie: elke opdracht, optie en attribute

jComponent 20 · jcomponent@20 jcomponentfrontendbindingreference Uitgevoerd met jComponent 20

<ui-bind> is het element dat bevelen aan de DOM toevoegt wanneer de waarde van de route verandert. deze pagina geeft een lijst met wat elk bevel doet, de opties die beslissen als het loopt en de attributen die kiezen welk element het verandert

Het formaat is config="command:expression;command:expression". In een expressie is value de waarde van het pad en element (ook el) het element dat wordt gewijzigd. Een commando kan een selector hebben (text .name:value past het toe op de elementen .name erin) en attr neemt eerst de attribuutnaam (attr title:value).

Commando's die het element wijzigen

CommandoWat het doet
text:exprzet de tekst; een lege waarde toont de tekst van empty
html:exprzet de inner HTML (escape die zelf)
value:exprzet de waarde van een formulierbesturingselement
title:expr, href:expr, src:exprzet dat attribuut
attr name:exprzet elk attribuut
.class:exprvoegt de klasse toe wanneer de expressie waar is en verwijdert haar wanneer onwaar
show:expr / hide:exprvoegt de klasse hidden toe of verwijdert haar
visible:expr / invisible:exprvoegt de klasse invisible toe of verwijdert haar (het element behoudt zijn ruimte)
checked:exprvinkt de input erin aan of uit
disabled:expr / enabled:exprschakelt de besturingselementen erin (input, select, textarea, button) en de ui-component-elementen erin uit of in
required:exprzet de optie required van de ui-component-elementen erin (een gewone input blijft onaangeroerd)
templaterendert het Tangular-sjabloon van het element (zie het sjabloonrecept)
exec:path / refresh:pathroept de functie op dat pad aan met de waarde, het pad en het element, bij elke SET van het pad van de binder

show en hide draaien eerst, dan visible en invisible, en text, html en template het laatst, zodat de zichtbaarheid van het element al bekend is wanneer de inhoud wordt geschreven. text, html en template worden alleen geschreven zolang het element zichtbaar is, tenzij forcerender:true in dezelfde configuratie staat: dan worden ze ook geschreven als het element verborgen is.

Opties: wanneer de commando's draaien

OptieWat het doet
changesslaat de update over wanneer de waarde gelijk is aan de vorige
strictdraait alleen wanneer het pad van de binder zelf is veranderd, niet wanneer een kindpad is veranderd (user.name voert geen binder van user uit)
track:a,bdraait alleen wanneer een van die paden is veranderd (een binder van user die user.name volgt, negeert user.age); draait opnieuw bij elke SET van een gevolgd pad, ook met dezelfde waarde
oncedraait eenmaal en daarna wordt de binder verwijderd
check:pathroept de functie op dat pad aan met (value, path, element); de commando's draaien alleen wanneer die true teruggeeft
delay:mswacht zoveel milliseconden en rendert eenmaal, ook als de waarde ondertussen meermaals is veranderd (100 wanneer geen waarde is opgegeven)
empty:textde tekst die wordt getoond in plaats van een lege waarde (--- wanneer geen tekst is opgegeven)
format:patternformatteert de waarde van text, html, value, attr, title, href en src met String.format
class:namevoegt die klasse eenmaal toe aan het element ui-bind, na de eerste render
assign:pathslaat de binderinstantie op dat pad op
helpers:pathhet object op dat pad levert de helpers van het sjabloon: met helpers:hh en hh = { shout: fn } kan het sjabloon {{ valueshout() }} gebruiken

Attributen: welk element verandert

Standaard wijzigen de commando's het element ui-bind. Deze attributen kiezen een ander:

  • element="#target" elk element van de pagina (een jQuery-selector)
  • child=".inner" een element binnen het ui-bind
  • parent=".card" de dichtstbijzijnde voorouder die overeenkomt

Het pad kan beginnen met ! (path="!user.nick"): de binder negeert dan de momenten waarop de waarde null of undefined is. Een commandonaam kan ook beginnen met ! of ~: het voorvoegsel wordt geaccepteerd en genegeerd, het commando werkt als zonder.

Attribute Commands

  • Gebruik één attribuut per commando: schrijf title:value en alt:value als twee commando’s.
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>
Probeer het in je browser

Bewerk het voorbeeld en voer het uit. Het draait in een geïsoleerd frame in je browser; er wordt niets naar onze server gestuurd.

Voorbeeld