É o mapeamento dos Widgets Concreto para Interface Abstrata selecionada durante a Seleção de Interface
var concret = [
{
name: 'user',
head: [
...
],
structure:[
...
]
maps: [
...
]
}
]
Cada interface abstrata é composta por 4 parâmetros:
Nome da interface concreta, este nome será utilizado pelo parâmetro concrete de elementos da
Seleção de Interface.
Se na seleção de interface nenhum parâmetro concrete for informado, a seleção de interface assumirá que o nome
da interface concreta será o mesmo que da interface abstrata.
Uma lista de widgets concretos que não compõem a estrutura da interface, mas sim, suas configurações,
dependências como css, favicon e até mesmo, no caso de uma página HTML, o title da página.
Uma lista de widgets abstratos que terão a organização de seus filhos redefinida.
/** interface abstrata **/
{name:'pai', children: [
{name:'filho1'},
{name:'filho2'},
{name:'filho3'}
]}
/** interface concreta **/
structure:[
{name:'pai', children: [
{name:'filho1'},
{name:'agrupador', children: [
{name:'filho2'},
{name:'filho3'}
]}
]}
]
Uma lista de widgets concretos utilizados para mapear os widgets abstratos. Gerando a interface para o usuário que acessa a aplicação.
Os widget concretos podem ser criados e customizados pelo designer da aplicação, mas eles possuem uma interface de parâmetros que deverá ser seguido por todos os widgets concretos criados.
Obrigatório
Nome do widget abstrato que será mapeado. Este nome pode se repetir, pois um mesmo widget abstrato pode ser mapeado por vários widgets concreto, mas somente o último que for válido será utilizado para exibir o widget abstrato.
Obrigatório
Tipo do widget concreto
Veja os tipos de widgets concretos disponíveis
Opcional
Informar a condição que deve ser avaliada para que este widget concreto seja mapeado com o widget abstrato na interface.
Você pode utilizar uma condição geral ou escrever uma expressão que deverá ser avaliada.
De preferência a escrever as condição na estrutura de condição do framework.
Mais informações sobre condições
Opcional
Será o valor a ser exibido pelo widget concreto.
value:"$data.name"
Interface concreta mapeando widgets concretos para uma interface de busca na estrutura do Freebase
var concrete = [{
name: 'search',
head: [
{name: 'main_css', widget:'Head', href:'css/bootstrap.css', tag: 'style'},
{name: 'secondary_css', widget:'Head', href:'css/freebase.css', tag: 'style'},
{name: 'viewport', widget:'Meta', content:'width=device-width, initial-scale=1'},
{name: 'title', widget:'Title', value: '"FreeBase"'}
],
maps: [
{ name: 'header', widget: 'BootstrapSimple', text:'center', class:'container-fluid fundo' },
{ name: 'logo', widget: 'SimpleHtml', tag:'img', src:'"imgs/freebase_logo.png"' },
{ name: 'search_form', widget: 'SimpleHtml', tag:'form', onsubmit:'do_search(event);' },
{ name: 'search_group', widget: 'BootstrapSimple', input:'group', sm:'8', class:'form_center' },
{ name: 'search_field', widget: 'BootstrapSimple', tag:'input', input:'lg', form:'control', placeholder:'"Escreve o que deseja buscar"' },
{ name: 'search_button', widget: 'BootstrapFormGroupButton', class:'btn-warning', value:'"Buscar"' },
{ name: 'footer', widget: 'SimpleHtml', tag:'div', class:'container' },
{ name: 'footer-content', widget: 'BootstrapFooter' }
]}];
Mapeamento widgets de acordo com condições
...
maps: [
{ name: 'element', widget: 'SimpleHtml', tag: 'h1', value:'$bind', class: 'big', when:'isDesktop' },
{ name: 'element', widget: 'SimpleHtml', tag: 'h1', value:'$bind', class: 'medium', when:'isTablet' },
{ name: 'element', widget: 'SimpleHtml', tag: 'h1', value:'$bind', class: 'small', when:'isMobile' }
]
Alterando titulo da página com informações vindas do modelo
...
head: [
{name: 'title', widget:'Title', value: '"Exibidor de Artigos | " + $data.title'}
]
Criando eventos em widgets
...
maps: [
...
{ name: 'element', widget: 'SimpleHtml', tag: 'button', value:'"Clique"', onclick: 'minha_funcao(event)' },
]
function minha_funcao(e) deve ser definida em um contexto global, de preferência, atribuída ao objeto window do javascript