Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Rails视图中将Ruby变量传递给JavaScript函数?_Javascript_Ruby On Rails_Prototypejs - Fatal编程技术网

如何在Rails视图中将Ruby变量传递给JavaScript函数?

如何在Rails视图中将Ruby变量传递给JavaScript函数?,javascript,ruby-on-rails,prototypejs,Javascript,Ruby On Rails,Prototypejs,我想知道在rails视图中将变量传递给JavaScript函数的最佳实践是什么。现在我正在做一些类似的事情: <% content_for :javascript do %> <script type="text/javascript"> Event.observe(window, 'load', function(){ js_function(<%= @ruby_array.to_json %>, <%

我想知道在rails视图中将变量传递给JavaScript函数的最佳实践是什么。现在我正在做一些类似的事情:

<% content_for :javascript do %> 
  <script type="text/javascript">
    Event.observe(window, 'load', function(){          
        js_function(<%= @ruby_array.to_json %>, <%= @ruby_var %>); )}
  </script>
<% end %>

观察(窗口“加载”,函数(){
js_函数(,;)}

这是正确的方法吗?

有一种叫做“不引人注目的javascript”的技术。这里有一个关于它的铁路司机:。它可以与jQuery原型一起工作。还有一些插件可以帮助简化文章中描述的一些任务。

我发现gem可以帮助您轻松完成任务。

有几个选项:

- content_for :javascripts_vars do
  = "var costs_data = #{@records[:cost_mode][:data].to_json}".html_safe
  = "var graph_data = #{@records[:cost_mode][:graph].to_json}".html_safe
escape\u javascript

别名:
j

仅适用于字符串

转义在Javascript字符串中可能具有特殊含义的字符, 与反斜杠转义一样,转换为适合放入Javascript字符串文字引号中的格式

保持输入的
html\u安全状态

因此需要
html\u-safe
否则会显示特殊的html字符,如HAML can数据中的
,因此:

.position{data: {latitude: @claim.latitude.to_json, longitude: @claim.longitude.to_json}}

:javascript
   var latitude = $('.position').data('latitude');
   var longitude = $('.position').data('longitude');

请注意,如果您没有在视图中使用
escape\u javascript
,您可以这样:

或者,如果这对您不起作用,请将输入复制到您的代码中,如果需要:

  JS_ESCAPE_MAP = {
    '\\'    => '\\\\',
    "</"    => '<\/',
    "\r\n"  => '\n',
    "\n"    => '\n',
    "\r"    => '\n',
    '"'     => '\\"',
    "'"     => "\\'"
  }

  JS_ESCAPE_MAP["\342\200\250".dup.force_encoding(Encoding::UTF_8).encode!] = "&#x2028;"
  JS_ESCAPE_MAP["\342\200\251".dup.force_encoding(Encoding::UTF_8).encode!] = "&#x2029;"

  # Escapes carriage returns and single and double quotes for JavaScript segments.
  #
  # Also available through the alias j(). This is particularly helpful in JavaScript
  # responses, like:
  #
  #   $('some_element').replaceWith('<%= j render 'some/element_template' %>');
  def escape_javascript(javascript)
    if javascript
      result = javascript.gsub(/(\\|<\/|\r\n|\342\200\250|\342\200\251|[\n\r"'])/u) { |match| JS_ESCAPE_MAP[match] }
      javascript.html_safe? ? result.html_safe : result
    else
      ""
    end
  end
JS_ESCAPE_MAP={
'\\'    => '\\\\',
请你试着阅读这篇文章,以便更好地理解如何不回答。也就是说:“根本无法回答问题的答案”:仅仅是一个指向外部网站的链接
<%= content_tag 'div', '', id: 'data', data: {key1: 'val1', key2: 'val2'} %>
<%= javascript_tag do %>
  $('#data').data('key1') === 'val1'
  $('#data').data('key2') === 'val2'
<% end %>
gem 'gon'
gon.key1 = 'val1'
gon.key2 = 'val2'
<html>
<head>
  <meta charset="utf-8"/>
  <%= include_gon %>
<%= javascript_tag do %>
  gon.key1 === 'val1'
  gon.key2 === 'val2'
<% end %>
.position{data: {latitude: @claim.latitude.to_json, longitude: @claim.longitude.to_json}}

:javascript
   var latitude = $('.position').data('latitude');
   var longitude = $('.position').data('longitude');
require 'action_view/helpers/javascript_helper'
include ActionView::Helpers::JavaScriptHelper
# escape_javascript is available here.
  JS_ESCAPE_MAP = {
    '\\'    => '\\\\',
    "</"    => '<\/',
    "\r\n"  => '\n',
    "\n"    => '\n',
    "\r"    => '\n',
    '"'     => '\\"',
    "'"     => "\\'"
  }

  JS_ESCAPE_MAP["\342\200\250".dup.force_encoding(Encoding::UTF_8).encode!] = "&#x2028;"
  JS_ESCAPE_MAP["\342\200\251".dup.force_encoding(Encoding::UTF_8).encode!] = "&#x2029;"

  # Escapes carriage returns and single and double quotes for JavaScript segments.
  #
  # Also available through the alias j(). This is particularly helpful in JavaScript
  # responses, like:
  #
  #   $('some_element').replaceWith('<%= j render 'some/element_template' %>');
  def escape_javascript(javascript)
    if javascript
      result = javascript.gsub(/(\\|<\/|\r\n|\342\200\250|\342\200\251|[\n\r"'])/u) { |match| JS_ESCAPE_MAP[match] }
      javascript.html_safe? ? result.html_safe : result
    else
      ""
    end
  end