RIOT.JS - Guia rápido
RIOT.js é uma biblioteca de UI baseada em componentes da Web de tamanho muito pequeno / leve para desenvolver aplicativos da web. Ele combina os benefícios do React.JS e do Polymer com uma implementação muito concisa e construções simples de aprender e usar. Sua versão reduzida tem quase 10 KB.
A seguir estão os principais recursos do RIOT.js
Expression Bindings
Carga útil muito pequena durante atualizações e refluxos de DOM.
As alterações se propagam para baixo das tags pais para as tags / controles filhos.
Usa expressões pré-compiladas e as armazena em cache para alto desempenho.
Fornece uma boa construção sobre eventos de ciclo de vida.
Segue Padrões
Nenhum sistema de evento proprietário
Sem dependência de nenhuma biblioteca polyfill.
Nenhum atributo extra adicionado ao HTML existente.
Integra-se bem com jQuery.
Valores fundamentais
RIOT.js é desenvolvido considerando os seguintes valores.
Simples e minimalista.
Fácil de aprender e implementar.
Fornece visualizações reativas para construir interfaces de usuário.
Fornece Biblioteca de Eventos para construir APIs com módulos independentes.
Para cuidar do comportamento do aplicativo com o botão Voltar do navegador.
Existem duas maneiras de usar o RIOT js.
Local Installation - Você pode baixar a biblioteca RIOT em sua máquina local e incluí-la em seu código HTML.
CDN Based Version - Você pode incluir a biblioteca RIOT em seu código HTML diretamente da Content Delivery Network (CDN).
Instalação Local
Vou ao https://riot.js.org para baixar a versão mais recente disponível.
Agora coloque baixado riot.min.js arquivo em um diretório do seu site, por exemplo, / riotjs.
Exemplo
Agora você pode incluir a biblioteca riotjs em seu arquivo HTML da seguinte maneira -
<!DOCTYPE html>
<html>
<head>
<script src = "/riotjs/riot.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/riot/3.13.2/riot+compiler.min.js"></script>
</head>
<body>
<messageTag></messageTag>
<script>
var tagHtml = "<h1>Hello World!</h1>";
riot.tag("messageTag", tagHtml);
riot.mount("messageTag");
</script>
</body>
</html>
Isso produzirá o seguinte resultado -
Versão baseada em CDN
Você pode incluir a biblioteca RIOT js em seu código HTML diretamente da Content Delivery Network (CDN). O Google e a Microsoft fornecem entrega de conteúdo para a versão mais recente.
Note - Estamos usando a versão CDNJS da biblioteca em todo este tutorial.
Exemplo
Agora vamos reescrever o exemplo acima usando a biblioteca jQuery do CDNJS.
<!DOCTYPE html>
<html>
<head>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/riot/3.13.2/riot+compiler.min.js"></script>
</head>
<body>
<messageTag></messageTag>
<script>
var tagHtml = "<h1>Hello World!</h1>";
riot.tag("messageTag", tagHtml);
riot.mount("messageTag");
</script>
</body>
</html>
Isso produzirá o seguinte resultado -
RIOT funciona criando tags html reutilizáveis e personalizadas. Essas tags são semelhantes aos componentes da Web e são reutilizáveis em páginas e aplicativos da Web.
Passos para usar RIOT
Importe riot.js na página html.
<head>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/riot/3.13.2/riot+compiler.min.js"></script>
</head>
Inicie uma seção de script e defina o conteúdo da tag como html. O script também pode ser incluído, o que veremos mais tarde no tutorial.
var tagHtml = "<h1>Hello World!</h1>";
Defina uma tag usando o método riot.tag (). Passe para ele o nome da tag, messageTag e variável que contém o conteúdo da tag.
riot.tag("messageTag", tagHtml);
Monte a tag usando o método riot.mount (). Passe para ele o nome da tag, messageTag. O processo de montagem monta a messageTag em todas as suas ocorrências na página html. A tag MessageTag deve ser definida usando riot.js antes da montagem.
riot.mount("messageTag");
</script>
A seguir está o exemplo completo.
Exemplo
<!DOCTYPE html>
<html>
<head>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/riot/3.13.2/riot+compiler.min.js"></script>
</head>
<body>
<messageTag></messageTag>
<script>
var tagHtml = "<h1>Hello World!</h1>";
riot.tag("messageTag", tagHtml);
riot.mount("messageTag");
</script>
</body>
</html>
Isso produzirá o seguinte resultado -
RIOT funciona criando tags html reutilizáveis e personalizadas. Essas tags são semelhantes aos componentes da Web e são reutilizáveis em páginas e aplicativos da Web. Quando você inclui a estrutura RIOT em sua página HTML, o js importado cria uma variável riot apontando para um objeto riot. Este objeto contém as funções que são necessárias para interagir com o RIOT.js, como criar e montar tags.
Podemos criar e usar tags de duas maneiras.
Inline HTML- Chamando a função riot.tag (). Esta função usa o nome e a definição da tag para criar uma tag. A definição da tag pode conter HTML, JavaScript e CSS etc.
Seperate Tag file- Armazenando a definição da tag no arquivo de tag. Este arquivo de tag contém a definição de tag para criar uma tag. Este arquivo precisa ser importado no lugar da chamada riot.tag ().
<script src = "/riotjs/src/messageTag.tag" type = "riot/tag"></script<
A seguir está o exemplo de tag embutida.
Exemplo
<!DOCTYPE html>
<html>
<head>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/riot/3.13.2/riot+compiler.min.js"></script>
</head>
<body>
<messageTag></messageTag>
<script>
var tagHtml = "<h1>Hello World!</h1>";
riot.tag("messageTag", tagHtml);
riot.mount("messageTag");
</script>
</body>
</html>
Isso produzirá o seguinte resultado -
A seguir está o exemplo de tag de arquivo externo.
Exemplo
messageTag.tag
<messageTag>
<h1>Hello World!</h1>
</messageTag>
index.htm
<!DOCTYPE html>
<html>
<head>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/riot/3.13.2/riot+compiler.min.js"></script>
</head>
<body>
<messageTag></messageTag>
<script src = "messageTag.tag" type = "riot/tag"></script>
<script>
riot.mount("messageTag");
</script>
</body>
</html>
Isso produzirá o seguinte resultado -
RIOT js usa {} para definir expressões. RIOT js permite os seguintes tipos de expressões.
Simple Expression - Defina uma variável e use dentro de uma tag.
<customTag>
<h1>{title}</h1>
<script>
this.title = "Welcome to TutorialsPoint.COM";
</script>
</customTag>
Evaluate Expression - Avalie uma variável ao usar em uma operação.
<customTag>
<h2>{val * 5}</h2>
<script>
this.val = 4;
</script>
</customTag>
Get value from Options object - Para obter o valor passado ao tag via atributos.
Exemplo
A seguir está o exemplo completo dos conceitos acima.
customTag.tag
<customTag>
<h1>{title}</h1>
<h2>{val * 5}</h2>
<h2>{opts.color}</h2>
<script>
this.title = "Welcome to TutorialsPoint.COM";
this.val = 4;
</script>
</customTag>
index.htm
<!DOCTYPE html>
<html>
<head>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/riot/3.13.2/riot+compiler.min.js"></script>
</head>
<body>
<customTag color="red"></customTag>
<script src = "customTag.tag" type = "riot/tag"></script>
<script>
riot.mount("customTag");
</script>
</body>
</html>
Isso produzirá o seguinte resultado -
As tags RIOT js podem ter seu próprio estilo e podemos definir estilos dentro das tags que afetarão apenas o conteúdo dentro da tag. Também podemos definir uma classe de estilo usando scripts, bem como dentro de uma tag. A seguir está a sintaxe de como obter o estilo de tags RIOT.
custom1Tag.tag
<custom1Tag>
<h1>{title}</h1>
<h2 class = "subTitleClass">{subTitle}</h2>
<style>
h1 {
color: red;
}
.subHeader {
color: green;
}
</style>
<script>
this.title = "Welcome to TutorialsPoint.COM";
this.subTitle = "Learning RIOT JS";
this.subTitleClass = "subHeader";
</script>
</custom1Tag>
index.htm
<!DOCTYPE html>
<html>
<head>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/riot/3.13.2/riot+compiler.min.js"></script>
</head>
<body>
<h1>Non RIOT Heading</h1>
<custom1Tag></custom1Tag>
<script src = "custom1Tag.tag" type = "riot/tag"></script>
<script>
riot.mount("custom1Tag");
</script>
</body>
</html>
Isso produzirá o seguinte resultado -
Condicionais são construções usadas para mostrar / ocultar elementos de tags RIOT. A seguir estão os três suportes condicionais do RIOT -
if - adicionar / remover elemento com base no valor passado.
<custom2Tag>
<h2 if = {showMessage}>Using if!</h2>
<script>
this.showMessage = true;
</script>
</custom2Tag>
show - mostra um elemento usando style = "display:' ' "se for verdadeiro.
<custom2Tag>
<h2 show = {showMessage}>Using show!</h2>
<script>
this.showMessage = true;
</script>
</custom2Tag>
hide - oculta um elemento usando style = "display:'none' "se for verdadeiro.
<custom2Tag>
<h2 show = {showMessage}>Using show!</h2>
<script>
this.showMessage = true;
</script>
</custom2Tag>
Exemplo
A seguir está o exemplo completo.
custom2Tag.tag
<custom2Tag>
<h2 if = {showMessage}>Using if!</h2>
<h2 if = {show}>Welcome!</h1>
<h2 show = {showMessage}>Using show!</h2>
<h2 hide = {show}>Using hide!</h2>
<script>
this.showMessage = true;
this.show = false;
</script>
</custom2Tag>
custom2.htm
<!DOCTYPE html>
<html>
<head>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/riot/3.13.2/riot+compiler.min.js"></script>
</head>
<body>
<custom2Tag></custom2Tag>
<script src = "custom2Tag.tag" type = "riot/tag"></script>
<script>
riot.mount("custom2Tag");
</script>
</body>
</html>
Isso produzirá o seguinte resultado -
Rendimento é um mecanismo para colocar conteúdo html externo em uma tag RIOT. Existem várias maneiras de fazer um rendimento.
Simple Yield- Se quisermos substituir um único marcador de posição na tag. Então use este mecanismo.
<custom3Tag>
Hello <yield/>
</custom3Tag>
<custom3Tag><b>User</b></custom3Tag>
Multiple Yield- Se quisermos substituir vários marcadores de posição na tag. Então use este mecanismo.
<custom4Tag>
<br/><br/>
Hello
<yield from = "first"/>
<br/><br/>
Hello
<yield from = "second"/>
</custom4Tag>
<custom4Tag>
<yield to = "first">User 1</yield>
<yield to = "second">User 2</yield>
</custom4Tag>
Exemplo
A seguir está o exemplo completo.
custom3Tag.tag
<custom3Tag>
Hello <yield/>
</custom3Tag>
custom4Tag.tag
<custom4Tag>
<br/><br/>
Hello
<yield from = "first"/>
<br/><br/>
Hello
<yield from = "second"/>
</custom4Tag>
custom3.htm
<html>
<head>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/riot/3.13.2/riot+compiler.min.js"></script>
</head>
<body>
<custom3Tag><b>User</b></custom3Tag>
<custom4Tag>
<yield to = "first">User 1</yield>
<yield to = "second">User 2</yield>
</custom4Tag>
<script src = "custom3Tag.tag" type = "riot/tag"></script>
<script src = "custom4Tag.tag" type = "riot/tag"></script>
<script>
riot.mount("custom3Tag");
riot.mount("custom4Tag");
</script>
</body>
</html>
Isso produzirá o seguinte resultado -
Podemos anexar eventos a elementos HTML da mesma forma como acessamos elementos HTML usando o objeto refs. Como primeira etapa, adicionamos um atributo ref a um elemento DOM e o acessamos usando this.ref no bloco de script da tag.
Attach ref - Adicione o atributo ref a um elemento DOM.
<button ref = "clickButton">Click Me!</button>
Use the refs object- Agora use o objeto refs no evento de montagem. Este evento é disparado quando o RIOT monta a tag personalizada e preenche o objeto refs.
this.on("mount", function() {
console.log("Mounting");
console.log(this.refs.username.value);
})
Exemplo
A seguir está o exemplo completo.
custom5Tag.tag
<custom5Tag>
<form>
<input ref = "username" type = "text" value = "Mahesh"/>
<input type = "submit" value = "Click Me!" />
</form>
<script>
this.on("mount", function() {
console.log("Mounting");
console.log(this.refs.username.value);
})
</script>
</custom5Tag>
custom5.htm
<html>
<head>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/riot/3.13.2/riot+compiler.min.js"></script>
</head>
<body>
<custom5Tag></custom5Tag>
<script src = "custom5Tag.tag" type = "riot/tag"></script>
<script>
riot.mount("custom5Tag");
</script>
</body>
</html>
Isso produzirá o seguinte resultado -
Podemos acessar elementos HTML usando o objeto refs. Como primeira etapa, adicionamos um atributo ref a um elemento DOM e o acessamos usando this.ref no bloco de script da tag.
Attach ref - Adicione o atributo ref a um elemento DOM.
<button ref = "clickButton">Click Me!</button>
Use the refs object- Agora use o objeto refs no evento de montagem. Este evento é disparado quando o RIOT monta a tag personalizada e preenche o objeto refs.
this.on("mount", function() {
this.refs.clickButton.onclick = function(e) {
console.log("clickButton clicked");
return false;
};
})
Exemplo
A seguir está o exemplo completo.
custom6Tag.tag
<custom6Tag>
<form ref = "customForm">
<input ref = "username" type = "text" value = "Mahesh"/>
<button ref = "clickButton">Click Me!</button>
<input type = "submit" value = "Submit" />
</form>
<script>
this.on("mount", function() {
this.refs.clickButton.onclick = function(e) {
console.log("clickButton clicked");
return false;
};
this.refs.customForm.onsubmit = function(e) {
console.log("Form submitted");
return false;
};
})
</script>
</custom6Tag>
custom6.htm
<html>
<head>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/riot/3.13.2/riot+compiler.min.js"></script>
</head>
<body>
<custom6Tag></custom6Tag>
<script src = "custom6Tag.tag" type = "riot/tag"></script>
<script>
riot.mount("custom6Tag");
</script>
</body>
</html>
Isso produzirá o seguinte resultado -
Podemos iterar por meio do array RIOT de primitivas ou de objetos e criar / atualizar os elementos html em movimento. Usando "cada" construção, podemos alcançá-lo.
Create array - Crie uma matriz de objeto.
this.cities = [
{ city : "Shanghai" , country:"China" , done: true },
{ city : "Seoul" , country:"South Korea" },
{ city : "Moscow" , country:"Russia" }
];
Add each attribute - Agora use o atributo "each".
<ul>
<li each = { cities } ></li>
</ul>
Iterate array of objects - Iterar a matriz usando as propriedades do objeto.
<input type = "checkbox" checked = { done }> { city } - { country }
Exemplo
A seguir está o exemplo completo.
custom7Tag.tag
<custom7Tag>
<style>
ul {
list-style-type: none;
}
</style>
<ul>
<li each = { cities } >
<input type = "checkbox" checked = { done }> { city } - { country }
</li>
</ul>
<script>
this.cities = [
{ city : "Shanghai" , country:"China" , done: true },
{ city : "Seoul" , country:"South Korea" },
{ city : "Moscow" , country:"Russia" }
];
</script>
</custom7Tag>
custom7.htm
<html>
<head>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/riot/3.13.2/riot+compiler.min.js"></script>
</head>
<body>
<custom7Tag></custom6Tag>
<script src = "custom7Tag.tag" type = "riot/tag"></script>
<script>
riot.mount("custom7Tag");
</script>
</body>
</html>
Isso produzirá o seguinte resultado -
Por meio do Mixin, podemos compartilhar funcionalidades comuns entre as tags. O Mixin pode ser uma função, classe ou objeto. Considere um caso de serviço de autenticação que cada tag deve usar.
Define Mixin - Defina o mixin usando o método riot.mixin () antes de chamar mount ().
riot.mixin('authService', {
init: function() {
console.log('AuthService Created!')
},
login: function(user, password) {
if(user == "admin" && password == "admin"){
return 'User is authentic!'
}else{
return 'Authentication failed!'
}
}
});
Initialize mixin - Inicialize o mixin em cada tag.
this.mixin('authService')
Use mixin - Após a inicialização, o mixin pode ser usado dentro da tag.
this.message = this.login("admin","admin");
Exemplo
A seguir está o exemplo completo.
custom8Tag.tag
<custom8Tag>
<h1>{ message }</h1>
<script>
this.mixin('authService')
this.message = this.login("admin","admin")
</script>
</custom8Tag>
custom9Tag.tag
<custom9Tag>
<h1>{ message }</h1>
<script>
this.mixin('authService')
this.message = this.login("admin1","admin")
</script>
</custom9Tag>
custom8.htm
<html>
<head>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/riot/3.13.2/riot+compiler.min.js"></script>
</head>
<body>
<custom8Tag></custom8Tag>
<custom9Tag></custom9Tag>
<script src = "custom8Tag.tag" type = "riot/tag"></script>
<script src = "custom9Tag.tag" type = "riot/tag"></script>
<script>
riot.mixin('authService', {
init: function() {
console.log('AuthService Created!')
},
login: function(user, password) {
if(user == "admin" && password == "admin"){
return 'User is authentic!'
}else{
return 'Authentication failed!'
}
}
});
riot.mount("*");
</script>
</body>
</html>
Isso produzirá o seguinte resultado -
O mecanismo observáveis permite que o RIOT envie eventos de uma tag para outra. As seguintes APIs são importantes para entender os observáveis RIOT.
riot.observable(element)- Adiciona suporte de Observador para o elemento de objeto fornecido ou, se o argumento estiver vazio, uma nova instância observável é criada e retornada. Depois disso, o objeto é capaz de disparar e ouvir eventos.
var EventBus = function(){
riot.observable(this);
}
element.trigger(events) - Execute todas as funções de retorno de chamada que ouvem o evento dado.
sendMessage() {
riot.eventBus.trigger('message', 'Custom 10 Button Clicked!');
}
element.on(events, callback) - Ouça o evento fornecido e execute o callback cada vez que um evento for disparado.
riot.eventBus.on('message', function(input) {
console.log(input);
});
Exemplo
A seguir está o exemplo completo.
custom10Tag.tag
<custom10Tag>
<button onclick = {sendMessage}>Custom 10</button>
<script>
sendMessage() {
riot.eventBus.trigger('message', 'Custom 10 Button Clicked!');
}
</script>
</custom10Tag>
custom11Tag.tag
<custom11Tag>
<script>
riot.eventBus.on('message', function(input) {
console.log(input);
});
</script>
</custom11Tag>
custom9.htm
<html>
<head>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/riot/3.13.2/riot+compiler.min.js"></script>
</head>
<body>
<custom10Tag></custom10Tag>
<custom11Tag></custom11Tag>
<script src = "custom10Tag.tag" type = "riot/tag"></script>
<script src = "custom11Tag.tag" type = "riot/tag"></script>
<script>
var EventBus = function(){
riot.observable(this);
}
riot.eventBus = new EventBus();
riot.mount("*");
</script>
</body>
</html>
Isso produzirá o seguinte resultado -