Caso de uso: tengo una vista estática que muestra datos del controlador (datos de registro de la aplicación). Solo necesito obtener estos datos una vez, y deben pasarse al javascript de la vista (estoy usando una biblioteca js pivotable).
¿Cuál es mejor para llamar datos de nuestro controlador al javascript de nuestra vista?
Opción 1:
var data = JSON.parse('<%= @result %>');Opcion 2:
$.ajax({ url: "<%= path_to_data %>", type: "GET", dataType: "json", data: JSON.stringify(table), }); ¿Cuáles son los pros y los contras de las opciones? Un problema es que con la opción 1, Rails escribe @result en el javascript que, con grandes datos, parece llevar mucho tiempo escribir en el script (además de visualmente poco atractivo cuando se mira el javascript renderizado). La opción 2, sin embargo, requiere una llamada GET adicional a nuestro controlador.
Opción 3.
No use la interpolación erb en su JS en absoluto: use atributos de datos para pasar información desde la vista.
<div id="graph-module" data-source-url="<%= path_to_data %>"> ... </div> let promise = $.getJSON($('#graph-module').data("url")); promise.done(function(data){ // do something with the data });Sí, esto creará una solicitud GET adicional, pero vale la pena en mis libros para evitar mezclar los dominios del lado del servidor y del lado del cliente en una papilla, que es algo que Rails hace con demasiado entusiasmo.
Esto mantiene su JS en la tubería de activos (o webpacker) donde se puede minimizar, almacenar en caché e implementar a través de un CDN en lugar de una sopa JS/ERB que cambia según la solicitud actual.
También es más fácil de depurar, razonar y, en general, escribir un buen código cuando está en un archivo separado y no depende de ser analizado a través de otro idioma. Le permite usar herramientas de pelusa como JSLint.
Si desea usar la opción 1 de manera significativa, debe usar un global en lugar de var .