Hledání a volání komponent a pluginů: FIND, COMPONENTS, SETTER, EXE, TAPI, MIDDLEWARE a ADAPT
FIND(selector, [all])vrátí komponentu, která je připravená:'notice'je její název,'.msg'její cesta (odpovídá cestám, které ji obsahují) a'#id'její id; sallnastaveným natruevrátí seznam.COMPONENTS(path)vrátí seznam připravených komponent, jejichž cesta je podpath; příznaky cesty ji filtrují ('msg @visible').SETTER('name/method', a, b, c, d)zavolámethodkaždé připravené komponenty s tímto názvem ('.path/method'pro cestu,'#id/method'pro id,'*/method'pro všechny). Název, který ještě není načten, se nejprve načte (líná komponenta).ASETTER(...)ji nevolá: vrátí funkci, která to udělá.EXE(name, a, b, c, d)(totéž coEXEC()) zavolá to, co říká název:'plugin/method'metodu pluginu,'function'globální funkci, nebo cestu ve stavu, která drží funkci ('FUNC.save').SEEX(name, value)je totéž, ale když název není funkce, nastaví cestu navalue.TAPI(name, data, callback)jeAPI(DEF.api, ...)aPIPE(name, data, callback)jeAPI(DEF.pipe, ...): dvě adresy endpointů, které nastavíte jednou vDEF.apiaDEF.pipe.MIDDLEWARE(name, function(next) {})zaregistruje funkci, která se spustí před routou: musí zavolatnext(), aby ji pustila dál. Routa si říká o jeden (nebo více, oddělených čárkami) jako třetí argument:ROUTE('/path/', handler, 'name').MIDDLEWARE(['a', 'b'], callback)spustí middleware v pořadí a poté callback; ten, který nezavolánext(), řetězec zastaví.NEWUIBIND(element, path, config)vytvoříui-bindna elementu z kódu (element nepotřebuje atributy) a vrátí jej.ADAPT(path, id, text)připraví text komponenty, která přichází zvenčí: přeloží@(...), nahradí~PATH~aCLASScestou a~ID~id, a vložípathdo značek<ui-plugin>, které ji nemají.COMPILEje táž funkce jakoNOOPv jComponent 20: nedělá nic.- Objekty za vším:
jComponent,Total,MAINaMjsou týž objekt (engine:M.componentsje seznam komponent,M.versionverze),Wjewindow,DEFvýchozí hodnoty aREPO,FUNC,TEMPaPLUGINSjsou vaše jednoduché objekty:FUNCpro funkce, kteréEXE('FUNC.name')může volat,TEMPvyprázdní jComponent, když se stránka spustí znovu.
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> 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