Buscar y llamar componentes y plugins: FIND, COMPONENTS, SETTER, EXE, TAPI, MIDDLEWARE y ADAPT
FIND(selector, [all])devuelve un componente que está listo:'notice'es su nombre,'.msg'su ruta (coincide con las rutas que lo contienen) y'#id'su id; conallentruedevuelve la lista.COMPONENTS(path)devuelve la lista de componentes listos cuya ruta está bajopath; las banderas de una ruta la filtran ('msg @visible').SETTER('name/method', a, b, c, d)llama amethodde cada componente listo con ese nombre ('.path/method'para una ruta,'#id/method'para un id,'*/method'para todos). Un nombre que aún no está cargado se carga primero (un componente perezoso).ASETTER(...)no lo llama: devuelve una función que lo hará.EXE(name, a, b, c, d)(igual queEXEC()) llama a lo que dice el nombre:'plugin/method'un método de un plugin,'function'una función global, o una ruta del estado que contiene una función ('FUNC.save').SEEX(name, value)es igual, pero cuando el nombre no es una función pone la ruta avalue.TAPI(name, data, callback)esAPI(DEF.api, ...)yPIPE(name, data, callback)esAPI(DEF.pipe, ...): dos direcciones de endpoints que se establecen una vez enDEF.apiyDEF.pipe.MIDDLEWARE(name, function(next) {})registra una función que se ejecuta antes de una ruta: tiene que llamar anext()para dejarla seguir. Una ruta pide una (o más, separadas por comas) como tercer argumento:ROUTE('/path/', handler, 'name').MIDDLEWARE(['a', 'b'], callback)ejecuta los middleware en orden y luego el callback; uno que no llame anext()detiene la cadena.NEWUIBIND(element, path, config)crea unui-binden un elemento desde el código (el elemento no necesita los atributos) y lo devuelve.ADAPT(path, id, text)prepara el texto de un componente que viene de fuera: traduce@(...), reemplaza~PATH~yCLASSpor la ruta y~ID~por el id, y pone elpathen las etiquetas<ui-plugin>que no lo tienen.COMPILEes la misma función queNOOPen jComponent 20: no hace nada.- Los objetos detrás de todo:
jComponent,Total,MAINyMson el mismo objeto (el motor:M.componentses la lista de componentes,M.versionla versión),Weswindow,DEFlos valores por defecto, yREPO,FUNC,TEMPyPLUGINSson objetos simples tuyos:FUNCpara funciones queEXE('FUNC.name')puede llamar,TEMPlo vacía jComponent cuando la página vuelve a empezar.
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> Pruébalo en tu navegador
Edita el ejemplo y ejecútalo. Se ejecuta en un marco aislado de tu navegador; no se envía nada a nuestro servidor.
Vista previa