Apoyo Lectura - Javascript y UJS
Apoyo Lectura - Javascript y UJS
UJS es una técnica en la cual no se mezcla el código javascript con HTML, esto quiere decir que no
existe código inline, como por ejemplo onclick.
rails-ujs
La librería rails-ujs nos permite implementar funcionalidades sin necesidad de escribir código extra:
Originalmente fue escrita sobre jQuery bajo el nombre de jquery-ujs. Tiempo después se quitó la
dependencia de jQuery para ser integrada a Rails desde la versión 5.1 en adelante.
Casos de usos más comunes
¿Cómo? Resultado
¿Cómo? Resultado
<%= submit_tag "Create Product", data: { confirm: "Do you want to create the
product?" } %>
¿Cómo? Resultado
Tan simple como agregar el atributo Un enlace puede ejecutar acciones del tipo
data-method DELETE por ejemplo.
Acciones que no son del tipo GET en links
Enlaza el evento click en los elementos del tipo Cuando un link es clickeado, la acción por
<a></a> que tienen el atributo data-method defecto es interrumpida y rails-ujs crea por un
formulario.
Llamadas AJAX en links
¿Cómo? Resultado
Tan simple como agregar el atributo rails-ujs inicia una petición AJAX y se disparan
data-remote una serie de eventos.
Llamadas AJAX en links
● ajax:before ● ajax:success
● ajax:beforeSend ● ajax:error
● ajax:send ● ajax:complete
● ajax:stopped
Aplicaciones avanzadas con
Javascript
Infinite scroll
<div class="content">
<%= raw @content %>
</div>
Infinite scroll
function loadNextData(){
Rails.ajax({
url: "/",
type: "get",
data: "format=js",
success: function(data) {},
error: function(data) {}
})
}
Infinite scroll
document.querySelector('.content').innerHTML += "<%= j
@content %>"
Infinite scroll
Restricción de tiempo en formularios
Transcurrido cierto periodo de tiempo ya no se pueda completar un formulario debido a que uno de
los inputs, por ejemplo, corresponde a un token que tiene tiempo de expiración.
Turbolinks
Sirve para mejorar el performance de la navegación y facilitar el trabajo con los renders desde una
aplicación Rails.
Turbolinks
document.addEventListener("turbolinks:load", function() {
// do something
})
Restricción de tiempo en formularios
document.addEventListener("turbolinks:load", function() {
const timeout = 10000;
setTimeout(function(){
// do somethig
}, timeout)
})
Restricción de tiempo en formularios
document.addEventListener("turbolinks:load", function() {
const timeout = 10000;//milliseconds
setTimeout(function(){
//disable all inputs
let inputs = Rails.$("form input, form textarea");
inputs.forEach(input => {input.disabled = true})
}, timeout);
})
Restricción de tiempo en formularios
Restricción de tiempo en formularios
<div class="field">
<span id="message">Form will lock in </span>
<span id="minutes"></span>:<span id="seconds"></span>
</div>
Restricción de tiempo en formularios
function displayTimer(miliseconds) {
let end = seconds / 1000;
let min = Rails.$("#minutes")[0];
let sec = Rails.$("#seconds")[0];
if (end > 0) {
let ticker = setInterval(function(){
end--;
if (end <= 0) { clearInterval(ticker); }
setTimeout(function(){
//disable all inputs
let inputs = Rails.$("form input, form textarea");
inputs.forEach(input => {input.disabled = true});
}, timeout);
})
Restricción de tiempo en formularios