Encontrar e chamar componentes e plugins: FIND, COMPONENTS, SETTER, EXE, TAPI, MIDDLEWARE e ADAPT
FIND(selector, [all])devolve um componente que está pronto:'notice'é o seu nome,'.msg'o seu caminho (corresponde aos caminhos que o contêm) e'#id'o seu id; comallatruedevolve a lista.COMPONENTS(path)devolve a lista dos componentes prontos cujo caminho está sobpath; as bandeiras de um caminho filtram-na ('msg @visible').SETTER('name/method', a, b, c, d)chamamethodde cada componente pronto com esse nome ('.path/method'para um caminho,'#id/method'para um id,'*/method'para todos). Um nome que ainda não está carregado é carregado primeiro (um componente preguiçoso).ASETTER(...)não o chama: devolve uma função que o fará.EXE(name, a, b, c, d)(igual aEXEC()) chama o que o nome diz:'plugin/method'um método de um plugin,'function'uma função global, ou um caminho no estado que contém uma função ('FUNC.save').SEEX(name, value)é igual, mas quando o nome não é uma função define o caminho comovalue.TAPI(name, data, callback)éAPI(DEF.api, ...)ePIPE(name, data, callback)éAPI(DEF.pipe, ...): dois endereços de endpoints que define uma vez emDEF.apieDEF.pipe.MIDDLEWARE(name, function(next) {})regista uma função que corre antes de uma rota: tem de chamarnext()para a deixar prosseguir. Uma rota pede uma (ou mais, separadas por vírgulas) como terceiro argumento:ROUTE('/path/', handler, 'name').MIDDLEWARE(['a', 'b'], callback)executa os middlewares por ordem e depois o callback; um que não chamenext()pára a cadeia.NEWUIBIND(element, path, config)cria umui-bindnum elemento a partir do código (o elemento não precisa dos atributos) e devolve-o.ADAPT(path, id, text)prepara o texto de um componente que vem de fora: traduz@(...), substitui~PATH~eCLASSpelo caminho e~ID~pelo id, e põe opathnas etiquetas<ui-plugin>que não o têm.COMPILEé a mesma função queNOOPno jComponent 20: não faz nada.- Os objetos por trás de tudo:
jComponent,Total,MAINeMsão o mesmo objeto (o motor:M.componentsé a lista de componentes,M.versiona versão),Wéwindow,DEFos valores por omissão, eREPO,FUNC,TEMPePLUGINSsão objetos simples seus:FUNCpara funções queEXE('FUNC.name')pode chamar,TEMPé esvaziado pelo jComponent quando a página recomeça.
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> Experimente no seu navegador
Edite o exemplo e execute-o. Corre numa moldura isolada do seu navegador; nada é enviado para o nosso servidor.
Pré-visualização