de retro de utilizar un parámetro de la función es una posibilidad, pero hay que escapar adecuadamente la variable que está de paso, ya sea con escape_javascript o a_json + html_safe como se explica a continuación.
Sin embargo, como quiere afectar archivos externos, las mejores técnicas serán usar gon. Otra buena posibilidad es usar datos-atributos.
gon
Gem especializada para el trabajo: https://github.com/gazay/gon
Probablemente la solución más robusta.
Gemfile:
gem 'gon'
controlador:
gon.timeleft = 1
Disposición app/views/layouts/application.html.erb
:
<html>
<head>
<meta charset="utf-8"/>
<%= include_gon %>
<%= javascript_include_tag 'application' %>
archivo de Activos:
gon.timeleft === 1
datos-atributos
Agregue valores a los atributos, recupérelos con operaciones JavaScript DOM.
A veces llamado "Javascript discreto".
Ver cabeza:
<%= javascript_include_tag 'application' %>
vista del cuerpo:
<%= content_tag 'div', '', id: 'data', data: {timeleft: '1'} %>
archivo de Activos:
$(function() {
parseInt($('#data').data('key1')) === 1
})
La siguiente ilustrar cómo escape_javascript
y to_json
trabajo para su uso en parte superior de la respuesta de retro.
escape_javascript
Alias: j
.
Funciona únicamente en cadenas.
Escapa de caracteres que pueden tener un significado especial en cadenas de JavaScript, como escapes de barra invertida, en un formato adecuado para poner dentro de cadenas de JavaScript las comillas literales.
Mantiene html_safe
estado de la entrada, por lo que necesita html_safe
caracteres HTML especiales, como por lo demás <
conseguirían escapado a <
.
<% a = "\\n<" %>
<%= javascript_tag do %>
f('<%= j(a) %>') // === '\\n<'
f('<%= j(a).html_safe %>') // === '\\n<'
<% end %>
a_json + html_safe
funciona porque JSON es almost a subset of Javascript object literal notation.
Funciona no solo en objetos hash, sino también en cadenas, matrices y enteros que son convertidos a fragmentos JSON del tipo de datos correspondiente.
<% data = { key1: 'val1', key2: 'val2' } %>
<%= javascript_tag do %>
var data = <%= data.to_json.html_safe %>
f(data.key1) \\ === 'val1'
f(data.key2) \\ === 'val2'
<% end %>
relacionadas: http://stackoverflow.com/questions/2464966/passing-ruby-variables-to-javascript-functio n-en-carriles-view –