Komponenten und Plugins finden und aufrufen: FIND, COMPONENTS, SETTER, EXE, TAPI, MIDDLEWARE und ADAPT
FIND(selector, [all])gibt eine Komponente zurück, die bereit ist:'notice'ist ihr Name,'.msg'ihr Pfad (er trifft die Pfade, die ihn enthalten) und'#id'ihre ID; mitallauftruegibt es die Liste zurück.COMPONENTS(path)gibt die Liste der bereiten Komponenten zurück, deren Pfad unterpathliegt; die Flags eines Pfads filtern sie ('msg @visible').SETTER('name/method', a, b, c, d)ruftmethodjeder bereiten Komponente mit diesem Namen auf ('.path/method'für einen Pfad,'#id/method'für eine ID,'*/method'für alle). Ein noch nicht geladener Name wird zuerst geladen (eine Lazy-Komponente).ASETTER(...)ruft sie nicht auf: Es gibt eine Funktion zurück, die es tun wird.EXE(name, a, b, c, d)(dasselbe wieEXEC()) ruft auf, was der Name sagt:'plugin/method'eine Methode eines Plugins,'function'eine globale Funktion oder einen Pfad im Zustand, der eine Funktion enthält ('FUNC.save').SEEX(name, value)ist dasselbe, aber wenn der Name keine Funktion ist, setzt es den Pfad aufvalue.TAPI(name, data, callback)istAPI(DEF.api, ...)undPIPE(name, data, callback)istAPI(DEF.pipe, ...): zwei Endpunkt-Adressen, die du einmal inDEF.apiundDEF.pipesetzt.MIDDLEWARE(name, function(next) {})registriert eine Funktion, die vor einer Route läuft: Sie mussnext()aufrufen, um sie weiterzulassen. Eine Route verlangt eine (oder mehrere, durch Kommas getrennt) als dritten Parameter:ROUTE('/path/', handler, 'name').MIDDLEWARE(['a', 'b'], callback)führt die Middleware der Reihe nach und dann den Callback aus; eine, dienext()nicht aufruft, stoppt die Kette.NEWUIBIND(element, path, config)erstellt aus dem Code einui-bindauf einem Element (das Element braucht die Attribute nicht) und gibt es zurück.ADAPT(path, id, text)bereitet den Text einer von außen kommenden Komponente vor: Es übersetzt@(...), ersetzt~PATH~undCLASSdurch den Pfad und~ID~durch die ID und setzt denpathin die<ui-plugin>-Tags, die keinen haben.COMPILEist in jComponent 20 dieselbe Funktion wieNOOP: Sie tut nichts.- Die Objekte hinter allem:
jComponent,Total,MAINundMsind dasselbe Objekt (die Engine:M.componentsist die Liste der Komponenten,M.versiondie Version),Wistwindow,DEFdie Standardwerte, undREPO,FUNC,TEMPundPLUGINSsind einfache Objekte von dir:FUNCfür Funktionen, dieEXE('FUNC.name')aufrufen kann,TEMPwird von jComponent geleert, wenn die Seite neu startet.
NEWACTION('Math/add', {
name: 'Add two numbers',
input: '*a:Number, *b:Number',
action: function($, model) {
$.callback({ sum: model.a + model.b });
}
});exports.install = function() {
ROUTE('API /api/ +math_add --> Math/add');
ROUTE('API /pipe/ +math_add --> Math/add');
};<!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-component name="notice" path="msg"></ui-component>
<ui-component name="notice" path="other"></ui-component>
<ui-plugin path="shop"></ui-plugin>
<p id="target">x</p>
<script>
COMPONENT('notice', function(self) {
self.make = function() { self.element.html('<b></b>'); };
self.say = function(text, extra) { self.find('b').text(text + (extra || '')); };
});
PLUGIN('shop', function(exports) {
exports.hello = function(a) { window.shoplog = 'hello ' + a; };
});
window.globalfn = function(a, b) { window.globallog = [a, b]; };
FUNC.local = function(a) { window.funclog = a; };
DEF.api = '/api/';
DEF.pipe = '/pipe/';
</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