Construir um componente para o UI Builder
Um componente do UI Builder é um ficheiro HTML com até quatro partes. O esqueleto que o editor oferece para um componente novo (public/template.txt) é um relógio:
<style>
.CLASS { font-size: 14px; }
</style>
<script>
exports.id = '';
exports.name = 'Clock';
exports.group = 'Controls';
exports.author = 'Total.js';
exports.icon = 'ti ti-clock';
exports.config = { bold: false, flash: true, seconds: true };
exports.version = '1';
exports.follow = true;
exports.make = function(instance, config, element, cls, iseditor) {
// build the component inside element
};
</script>
<readme>
The component renders the current time and the model contains a `Date` object.
</readme>
<settings>
<div class="padding">
<ui-component name="input" path="?.bold" config="type:checkbox">Apply bold font</ui-component>
</div>
</settings>| Parte | O que faz |
|---|---|
<style> | o CSS do componente; CLASS é substituído por uma classe que pertence ao componente |
<script> | exporta os metadados (id, name, group, author, icon, version, config com os valores predefinidos) e a função make |
<readme> | o texto de ajuda mostrado no editor (Markdown) |
<settings> | o formulário que edita config: entradas do jComponent cujo path começa por ?. seguido da chave da configuração |
A função make
make(instance, config, element, cls, iseditor) corre quando o componente é criado:
instanceé a instância do componente (set,on,emit,state...).configé a sua configuração eelemento elemento jQuery a preencher.clsé a classe que substituiuCLASSeiseditorindica se é desenhado dentro do editor ou num design renderizado (assim, por exemplo, um temporizador não precisa de correr enquanto desenha).
Lá dentro escuta eventos (instance.on('configure', ...) quando as definições mudam e instance.on('destroy', ...) para limpar temporizadores) e escreve o valor com instance.set('value', date).
Metadados, indicadores, métodos e eventos
Do README do editor:
- Metadados:
exports.follow = truemostra o componente no formulário de definições Path for reading/writing (apenas para o desenhador) eexports.hidden = trueoculta-o da lista de componentes. - Indicadores de uma instância:
instance.state.bind = trueliga o componente automaticamente dentro de um formulário, para os que leem e escrevem dados;instance.state.notify = trueemite apenas o eventonotifyquando o valor muda, em vez de definir diretamente o valor do componente (o componente Counter é o exemplo). - Método:
instance.datasource(CLID_OR_@INSTANCEID__OR__#VIEWID, function(value) {})lê uma fonte de dados e devolve um array de[id, name]. - Evento:
instance.on('refresh', function(meta) {})dispara quando alguns objetos mudaram:meta.typeéremoveouconfigure, commeta.itemsoumeta.item. - Propriedades do editor que um componente pode ler:
DEF.cl.datasource(listas de códigos e componentes comfollow),DEF.cl.paths,DEF.cl.list(todas as instâncias),DEF.cl.inputs,DEF.cl.outputs,DEF.cl.viewseDEF.cl.apps(designs irmãos). - Seguir: um
config.pathque começa por@significa que o componente segue outro.
Publique o ficheiro na sua própria lista de componentes (executar o editor) e a sua equipa poderá usá-lo a partir do editor.