tengo una plantilla .js.erb y estoy haciendo:¿cómo puedo convertir estructuras de datos ruby a estructuras de datos javascript con .js.erb?
var foo = <%= [1,2,3] %>;
var foo2 = <%= [1,2,3].to_json %>;
var foo3 = <%= ["bar"].to_json %>;
var foo4 = <%= {:foo => "bar"}.to_json %>;
foo es igual a 123
foo2 es igual a [1,2,3]
no está definido foo3 (porque el navegador se queja de un error de análisis)
foo4 no está definido (porque el navegador se queja de un error de análisis)
La única manera de que pudiera encontrar la manera de llegar a foo3 trabajo fue hacer:
var foo3 = "<%= ['bar'].to_json %>"; # foo3 => "["bar"]"
foo3.replace(/"/g, "\"")) # => "['bar']" <-- looks like eval should work...
eval(foo3.replace(/"/g, "\""))[0]; # => "bar" ... it works
no pude foo4 a trabajar de esta manera ... Intenté hacer:
var foo4 = <%= "{:foo => 'bar'}.to_json" %>; # foo4 => "{"foo:":"bar"}" %>;
foo4.replace(/"/g, "\"")); # => "{"foo":"bar"}" <-- looks like eval should work
eval(foo4.replace(/"/g, "\"")); # => "Parse error" <-- but it doesn't...
En pocas palabras, todo esto que necesita usar eval es ridículo, ¡DEBE haber una manera mejor! ¿Puede alguien por favor aclararme lo que es?!?!
foo.to_json es el camino correcto. Por favor, muéstranos a qué foo.to_json se está convirtiendo en la fuente js. –
Si hago var foo = <% = [1,2,3] .to_json%>, funciona ... Inspeccionar foo muestra una matriz js [1,2,3] ... pero si hago var foo = [ "a", "b", "c"]. to_json%> dice "Error de análisis" cuando cargo la página y foo no está definido. – patrick
Por favor * edite * su pregunta para agregar la información adicional. Y muéstranos qué es el ** Javascript ** como resultado del archivo Ruby js erb. Solo nos está diciendo "error de análisis" en el navegador: queremos ver * qué * no se pudo analizar - buscar en el archivo js. –