ForgejComponent
de

jComponent

ui-bind-Referenz: jeder Befehl, jede Option und jedes Attribut

jComponent 20 · jcomponent@20 jcomponentfrontendbindingreference Mit jComponent 20 ausgeführt

<ui-bind> ist das Element, das befehlen auf den DOM anwendet, wenn der Wert seiner Route sich ändert. Diese Seite enthält, was jede Befehl tut, die Optionen, die entscheiden wenn es läuft und die Attribute, die wählen die Elemente es ändern.

Das Format ist config="command:expression;command:expression". In einem Ausdruck ist value der Wert des Pfads und element (auch el) das Element, das geändert wird. Ein Befehl kann einen Selektor haben (text .name:value wendet ihn auf die Elemente .name darin an) und attr nimmt zuerst den Attributnamen (attr title:value).

Befehle, die das Element ändern

BefehlWas er tut
text:exprsetzt den Text; ein leerer Wert zeigt den Text von empty
html:exprsetzt das innere HTML (escape es selbst)
value:exprsetzt den Wert eines Formularelements
title:expr, href:expr, src:exprsetzt dieses Attribut
attr name:exprsetzt ein beliebiges Attribut
.class:exprfügt die Klasse hinzu, wenn der Ausdruck wahr ist, und entfernt sie, wenn er falsch ist
show:expr / hide:exprfügt die Klasse hidden hinzu oder entfernt sie
visible:expr / invisible:exprfügt die Klasse invisible hinzu oder entfernt sie (das Element behält seinen Platz)
checked:exprsetzt oder entfernt den Haken des darin liegenden input
disabled:expr / enabled:exprdeaktiviert oder aktiviert die darin liegenden Steuerelemente (input, select, textarea, button) und die darin liegenden ui-component-Elemente
required:exprsetzt die Option required der darin liegenden ui-component-Elemente (ein einfaches input bleibt unberührt)
templaterendert das Tangular-Template des Elements (siehe das Template-Rezept)
exec:path / refresh:pathruft die Funktion an diesem Pfad mit dem Wert, dem Pfad und dem Element auf, bei jedem SET des Pfads des Binders

show und hide laufen zuerst, dann visible und invisible, und text, html und template zuletzt, damit die Sichtbarkeit des Elements schon bekannt ist, wenn der Inhalt geschrieben wird. text, html und template werden nur geschrieben, solange das Element sichtbar ist, außer forcerender:true steht in derselben Konfiguration: Dann werden sie auch bei verborgenem Element geschrieben.

Optionen: wann die Befehle laufen

OptionWas sie tut
changesüberspringt die Aktualisierung, wenn der Wert derselbe wie der letzte ist
strictläuft nur, wenn sich der Pfad des Binders selbst geändert hat, nicht wenn sich ein Kindpfad geändert hat (user.name führt keinen Binder von user aus)
track:a,bläuft nur, wenn sich einer dieser Pfade geändert hat (ein Binder von user, der user.name verfolgt, ignoriert user.age); läuft bei jedem SET eines verfolgten Pfads erneut, auch mit demselben Wert
onceläuft einmal und dann wird der Binder entfernt
check:pathruft die Funktion an diesem Pfad mit (value, path, element) auf; die Befehle laufen nur, wenn sie true zurückgibt
delay:mswartet so viele Millisekunden und rendert einmal, auch wenn sich der Wert inzwischen mehrmals geändert hat (100, wenn kein Wert angegeben ist)
empty:textder Text, der anstelle eines leeren Wertes angezeigt wird (---, wenn kein Text angegeben ist)
format:patternformatiert den Wert von text, html, value, attr, title, href und src mit String.format
class:namefügt diese Klasse dem Element ui-bind einmal nach dem ersten Rendern hinzu
assign:pathspeichert die Binder-Instanz an diesem Pfad
helpers:pathdas Objekt an diesem Pfad liefert die Helfer des Templates: mit helpers:hh und hh = { shout: fn } kann das Template {{ valueshout() }} verwenden

Attribute: welches Element sich ändert

Standardmäßig ändern die Befehle das Element ui-bind. Diese Attribute wählen ein anderes:

  • element="#target" ein beliebiges Element der Seite (ein jQuery-Selektor)
  • child=".inner" ein Element innerhalb des ui-bind
  • parent=".card" der nächste passende Vorfahre

Der Pfad kann mit ! beginnen (path="!user.nick"): Der Binder ignoriert dann die Momente, in denen der Wert null oder undefined ist. Ein Befehlsname kann auch mit ! oder ~ beginnen: Das Präfix wird akzeptiert und ignoriert, der Befehl funktioniert wie ohne.

Attribute Befehl

  • Verwenden Sie ein Attribut pro Befehl: Schreiben Sie title:value und alt:value als zwei Befehle.
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>
Probiere es in deinem Browser aus

Bearbeite das Beispiel und führe es aus. Es läuft in einem isolierten Frame in deinem Browser; nichts wird an unseren Server gesendet.

Vorschau