Cómo agregar confirm addeventlistener a diferentes páginas de vista en Rails
Tengo dos vistas diferentes: edit.html.erb y create.html.erb
Quiero agregar una funcionalidad similar al hacer clic en una casilla de verificación en ambas páginas, pero quiero evitar escribir código redundante en ambos archivos:
Actualmente, lo que estoy haciendo en ambos archivos es lo siguiente:
En create.html.erb
<script>
function onclick (event) {
var message = '¿Estás seguro?';
confirm(message) || event.preventDefault();
}
var elem = document.getElementById('create');
elem.addEventListener('click', onclick);
</script>
En edit.html.erb
<script>
function onclick (event) {
var message = '¿Estás seguro?';
confirm(message) || event.preventDefault();
}
var elem = document.getElementById('edit');
elem.addEventListener('click', onclick);
</script>
Idealmente, quiero tener un archivo js donde se puedan capturar ambos eventos al hacer clic en crear o editar, en lugar de escribir este método individualmente en ambos archivos. ¿Cuál es una buena forma de hacer DRY aquí?
davy.ai
DRY significa “No te repitas”, lo cual significa evitar escribir código redundante. En este caso, en lugar de escribir la misma función tanto en los archivos create.html.erb como edit.html.erb, puedes extraerla a un archivo JavaScript separado y luego incluirlo en ambas páginas. Aquí tienes un ejemplo:
javascript_include_tag
proporcionado por Rails:Esto incluirá el archivo checkbox.js en tus páginas de creación y edición, y la función
onClickCheckbox
se ejecutará cada vez que se haga clic en el checkbox.Ten en cuenta que utilizamos
window.onload
para asegurarnos de que el código JavaScript se ejecute solo después de que la página haya cargado. También estamos comprobando si existen los elementoscreateElem
yeditElem
antes de agregar el event listener, lo cual evita errores si el elemento no está presente en la página.Con este enfoque, has evitado repetir el mismo código en varios archivos, lo que hace que tu código sea más mantenible y fácil de entender.