Me gustaría actualizar el html de un div usando jQuery en Rails. Y quiero usar ayudantes.

Por ejemplo, digamos que estoy tratando de poner una imagen en el div. Esto es lo que estoy haciendo en el archivo js:

// Update the html content of #div
// I am using a helper, img_tag

$("#div").html("<%= img_tag('some_image.png') %><br> + 'some message'"

Pero el ayudante no crea la etiqueta img. En cambio, se muestra en el div como una cadena.

i.e.
// Content of the div as a result:

<%= img_tag('some_image.png') %><br> some message

Cuando escribo manualmente la etiqueta html, funciona.

i.e.
$("#div").html("<img src="assets/images/some_image.png" alt="img"><br>
 + 'some message'"

Pero quiero saber cómo puedo usar ayudantes en este caso, porque también estoy tratando de usar otros ayudantes como link_to.

1
Sung Cho 5 sep. 2014 a las 08:22

2 respuestas

La mejor respuesta

Varios temas a considerar:


JS

En primer lugar, debe considerar el JS que está tratando de usar.

Por definición, el estándar JS no puede usar rails helpers . La razón es que JS es un lenguaje "front-end" / "del lado del cliente", que solo funcionará después de que se haya cargado una página. De hecho, JS tiende a funcionar solo con el "DOM" (Modelo de objeto de documento):

JavaScript (JS; pronunciación en inglés: / 'jɑvəˌskrɪpt /) es un lenguaje de programación dinámico. Se usa más comúnmente como parte de los navegadores web, cuyas implementaciones permiten que los scripts del lado del cliente interactúen con el usuario, controlen el navegador, se comuniquen asincrónicamente y alteren el contenido del documento que se muestra. También se está utilizando en la programación de red del lado del servidor (con Node.js), el desarrollo de juegos y la creación de aplicaciones móviles y de escritorio.

La conclusión es que Javascript solo se cargará en la parte del cliente de su aplicación . Dado que Ruby / Rails es servidor del lado, equívoco a los gustos de PHP, su JS no podrá procesar los ayudantes de Rails en el flujo tradicional que tiene.

La única forma de evitar esto es combinar su JS con los mecanismos de carga de Rails de alguna manera. Esto se puede hacer con ajax (para extraer del servidor) , o renderiza tu js con Rails (no estoy seguro de cómo)


Fix

Creo que puede usar preprocesamiento con Rails JS, lo que significa que, como {{X0 }}, podrás llamar a los ayudantes de Rails dentro de tus archivos javascript:

Lo mismo se aplica a un archivo JavaScript: app / assets / javascripts / projects.js.coffee.erb se procesa como ERB, luego CoffeeScript y se sirve como JavaScript.

Tenga en cuenta que el orden de estos preprocesadores es importante. Por ejemplo, si llamó a su archivo de JavaScript app / assets / javascripts / projects.js.erb.coffee, se procesaría primero con el intérprete de CoffeeScript, que no entendería ERB y, por lo tanto, tendría problemas.

Esto significa que si desea hacer lo que está haciendo, deberá agregar preprocesadores para asegurarse de que pueda llamar a los ayudantes de Rails:

#app/assets/javascripts/application.js.erb
var loaded = function(){
   $("#div").html("<%=j image_tag('some_image.png') %><br> + 'some message'"
};
$(document).on("page:load ready", loaded);
1
Richard Peck 5 sep. 2014 a las 10:25

Su archivo JavaScript debe tener una extensión .erb para usar ruby incrustado.

0
Zach 5 sep. 2014 a las 05:24