Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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