ob$ — Manual Completo
Versão: 1.1
Tipo: Micro-framework reativo em JavaScript puro
Dependências: nenhuma
Visão Geral
ob$ é um micro-framework que permite criar interfaces reativas usando apenas HTML e JavaScript simples.
Ele funciona como um container de estado global.
Quando uma variável muda:
ob$.nome = "Richard"
todos os elementos da página ligados a essa variável são atualizados automaticamente.
Sem frameworks pesados.
Sem build.
Sem dependências.
Instalação
Inclua o arquivo obs.js na página.
<script src="obs.js"></script>
Depois disso o objeto global ob$ estará disponível.
Conceito Principal
Tudo gira em torno de variáveis reativas.
Exemplo:
ob$.usuario = "Maria"
Qualquer elemento HTML que use usuario será atualizado automaticamente.
Variáveis Reativas
Criar variável:
ob$.nome = "João"
Alterar variável:
ob$.nome = "Carlos"
Excluir variável:
delete ob$.nome
data-bind (texto)
Liga uma variável ao texto de um elemento.
HTML
<span data-bind="nome"></span>
JavaScript
ob$.nome = "Pedro"
Resultado na tela
Pedro
data-html (HTML interno)
Permite renderizar HTML dentro do elemento.
HTML
<div data-html="conteudo"></div>
JavaScript
ob$.conteudo = "<b>Olá mundo</b>"
Resultado
Olá mundo (em negrito)
data-img (imagem)
Atualiza automaticamente o atributo src de uma imagem.
HTML
<img data-img="foto">
JavaScript
ob$.foto = "avatar.png"
data-class (classe CSS)
HTML
<div data-class="classe"></div>
JavaScript
ob$.classe = "alerta vermelho"
data-style (estilo CSS)
HTML
<div data-style="estilo"></div>
JavaScript
ob$.estilo = "background:red;color:white"
mostrar
Mostra o elemento quando a variável for verdadeira.
HTML
<div mostrar="logado">
Bem vindo!
</div>
JavaScript
ob$.logado = true
esconder
Esconde o elemento quando a variável for verdadeira.
HTML
<div esconder="logado">
Faça login
</div>
repetir listas
Permite renderizar arrays automaticamente.
HTML
<ul>
<li repetir="produto em produtos">
{{ name }}
</li>
</ul>
JavaScript
ob$.produtos = [
{name:"Notebook"},
{name:"Mouse"},
{name:"Teclado"}
]
Resultado
Notebook
Mouse
Teclado
templates dentro de repetir
Campos suportados
{{ campo }}
{{ campo.subcampo }}
{{ $index }}
{{ $id }}
Exemplo
<div repetir="produto em produtos">
<h3>{{ name }}</h3>
<p>{{ description }}</p>
<span>{{ price }}</span>
</div>
exemplo de card de produto
HTML
<div repetir="produto em produtos" class="card">
<img src="{{ image }}">
<h3>{{ name }}</h3>
<p>{{ description }}</p>
<strong>{{ price }}</strong>
</div>
JavaScript
ob$.produtos = [
{
name:"Notebook",
description:"16GB RAM",
price:"R$4500",
image:"notebook.jpg"
}
]
scroll infinito
Se existir um elemento com id load-more, o ob$ pode carregar mais dados automaticamente.
HTML
<div id="load-more">
Carregando...
</div>
JavaScript
ob$.loadMore = async function(){
const res = await fetch("/api/produtos")
const data = await res.json()
ob$.produtos = [...ob$.produtos, ...data]
}
ob$.init()
callbacks de mudança
Permite executar código quando uma variável muda.
Callback específico:
ob$.$("nome").callback = function(oldValue,newValue){
console.log(oldValue,newValue)
}
ob$.nome = "Carlos"
callback global
Executa para qualquer variável alterada.
ob$._defaultCallback = function(chave,valorAntigo,valorNovo){
console.log(chave,"mudou")
}
data-model (input bidirecional)
Permite que um input altere uma variável automaticamente.
HTML
<input data-model="nome">
JavaScript
ob$.nome = "Maria"
Quando o usuário digitar no input, ob$.nome também muda.
reprocessar DOM
Se você alterar o DOM manualmente:
ob$.bindAll()
Isso reaplica todos os bindings.
inicialização
Para ativar todos os recursos:
document.addEventListener("DOMContentLoaded",function(){
ob$.init()
})
propriedades internas
Versão do framework
ob$.version
Resetar estado
ob$.reset()
exemplo completo
HTML
<h1 data-bind="titulo"></h1>
<ul>
<li repetir="produto em produtos">
{{ name }} - {{ price }}
</li>
</ul>
JavaScript
ob$.titulo = "Lista de Produtos"
ob$.produtos = [
{name:"Mouse",price:"R$50"},
{name:"Teclado",price:"R$120"}
]
filosofia do ob$
ob$ foi criado para ser:
- extremamente simples
- sem dependências
- fácil de entender
- fácil de integrar com qualquer backend
- rápido de escrever
- rápido de executar
Ele permite construir aplicações modernas usando apenas:
HTML
JavaScript
JSON
APIs
Sem complexidade desnecessária.
site oficial
Em construção.
Projeto iniciado por Richard.