Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

160
Vistas
Dónde colocar Javascript usado en una página solo en Rails 7 con importmap

Cuando uso Rails 7 con mapas de importación, ¿dónde coloco el código que debe ejecutarse solo en una vista?

Específicamente, tengo una vista que necesita ejecutar algún código Javascript al cargar. Mi Javascript se parece a esto:

 import {TheController} from "./TheController" let controller = new TheController(); document.onreadystatechange = function () { if (document.readyState === 'complete') { controller.onLoad(); } };

¿Cómo configuro el entorno Javascript para que el código document.onreadystatechange sea ejecutado solo por la vista deseada? ( Casi todo funciona cuando coloco este código en un archivo importado por application.js , pero luego se ejecuta en todas las vistas).

Sospecho que la respuesta es crear importmaps e importmap_tags separados; pero puedo encontrar demostraciones de cómo hacerlo en Rails 7.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Como señala @Azrklm, la respuesta está contenida en este video https://youtu.be/PtxZvFnL2i0?t=1287 que comienza a las 21:38.

Supongamos que tenemos algo de JavaScript que queremos ejecutar solo en una vista llamada FancyView . Aquí están los pasos

  1. Coloque el código exclusivo de FancyView en su propio archivo, digamos FancyView.js (y elimínelo de application.js , si es necesario).

  2. Agregue una línea para FancyView.js al mapa de importación: pin "FancyView"

  3. Agregue la línea <%= yield :head %> to application.html.erb`. (Esto le dice a Rails que las vistas/diseños individuales pueden querer agregar información adicional al encabezado de la página web).

     <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %> <%= javascript_importmap_tags %> <%# This loads application.js %> <%= yield :head %>
  4. Agregue una javascript_import_module_tag a la vista:

     <% content_for :head do %> <%= javascript_import_module_tag "FancyView" %> <% end %>
about 4 years ago · Juan Pablo Isaza Denunciar

0

Si alguien tiene un problema similar y encuentra esta pregunta, encontré que la respuesta de @Zack es perfectamente concisa y exactamente lo que necesitaba, PERO con 2 advertencias importantes:

  1. No pude usar la convención de nomenclatura mayúscula para mi js. FancyView necesitaba ser fancyView .

  2. El javascript_import_module_tag debe venir después de sus javascript_importmap_tags

     <%= javascript_importmap_tags %> <%= yield(:head) %>

Esto también se explica ahora en la página de github de Rails: https://github.com/rails/importmap-rails#selectively-importing-modules

¡Gracias @Zack!

about 4 years ago · Juan Pablo Isaza Denunciar

0

DHH lo explica bastante bien, echa un vistazo por favor https://youtu.be/PtxZvFnL2i0?t=1287

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda