Usando una variable javascript en escape_javascript

He estado tratando de hacer que funcione lo siguiente: quiero que una función jQuery cargue un parcial específico cuando se hace clic en un determinado div con una ID. Quiero que esta identificación sea parte de: los locales que estoy usando junto con el parcial.

$("#main>.dots").live("mousedown", function(e) {
        $num = 8;
        $("#main").append("<%= escape_javascript(render :partial => 'projects/show',     :locals => {:i => "#{$num}"}).html_safe %>")
    })

Hasta ahora no he podido hacerlo bien. El código anterior devuelve el 'ID llamado para nil', por lo que $num no se asigna correctamente a la función escape_javascript. Cuando reemplazo $num con el número entero 8, funciona (entre las etiquetas <% %>).

¿Soluciones?

la sintaxis:

$("#main").append("<%= escape_javascript(render :partial => 'projects/show', :locals => {:i => 8}).html_safe %>")

funciona, así que esa es la forma en que quiero ir, excepto que el 8 es jQuery, por supuesto

preguntado el 13 de enero de 13 a las 21:01

.live() está depreciado (y muy lento) -

Gracias por la respuesta, los reemplazaré con 'on ()' :) (olvidé que estaba en desuso) -

¿Hay alguna razón específica por la que está usando mousedown en lugar de hacer clic? -

no, lo estoy cambiando a 'clic' ahora, pero una parte de mi código no parece funcionar ahora. todo debe estar encerrado en '$(function() { //code }', ¿verdad? -

Creo que ya encontré una respuesta: jquery solo puede asignar eventos cuando ya existen nombres de clase, y muchas de mis funciones están dirigidas a HTML que aún no se ha cargado en la página. Estoy volviendo a .live() ya que parece funcionar mejor. <-- Definitivamente buscaré una alternativa cuando vea tiempo -

1 Respuestas

He arreglado esto haciendo

var dataString = "projectid=" + $(this).attr("id") + "&left=" + $(this).css("left") + '&top=' + $(this).css("top");
    $.ajax({
        url: "/projects/show",
        type: "get",
        data: dataString,
        success: function(data) {
            $("#main").append(data)
        }
    });

Entonces, básicamente, usé AJAX para poder enviar datos POST a la acción del controlador correcto :)

Respondido el 16 de enero de 13 a las 16:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.