Rails - 将信息从视图传递到 Javascript

Posted

技术标签:

【中文标题】Rails - 将信息从视图传递到 Javascript【英文标题】:Rails- Pass information from view to Javascript 【发布时间】:2014-08-17 14:18:28 【问题描述】:

我想开始使用 websockets。 I read all the docs 什么都懂,但遗漏了我需要的东西:如何将信息从视图传递给 JS?

我需要将数据从 javascript 传递到我的控制器。我不明白的是,如何在我的视图中将动态生成的数据发送到要发送的 javascript?

现在我的视图在每个 HTTP 请求上接收一个实例变量,它遍历每个实例变量并创建一个按钮,该按钮提交一个带有从该实例变量中提取的信息的哈希。我不明白如何用 Javascript 做同样的事情,因为 Javascript 无法理解 Ruby 类。

这就是我的代码现在的样子:

查看/仪表板/_other_characters.html.erb

<% other_characters.each do |other_character| %>
  <p><%= other_character.name %> is standing here (<%= other_character.power_level %>)</p>

  <%= button_to "punch #other_character.name",
    attacks_path(
      target_type: other_character.class,
      attack_type: :punch, 
      target_id: other_character,
      target_name: other_character.name
  ) %>
<% end %>

这就是我希望使用 JS 能够做到的事情

var task = 
  name: 'Start taking advantage of WebSockets',
  completed: false

var dispatcher = new WebSocketRails('localhost:3000/websocket');
dispatcher.trigger('tasks.create', task);

【问题讨论】:

【参考方案1】:

试试

<%= button_to "punch #other_character.name",
  attacks_path(
    target_type: other_character.class,
    attack_type: :punch, 
    target_id: other_character,
    target_name: other_character.name
  ), id: '***', data: name: '***', other_key: 'other_value'  %>

然后就可以通过jQuery data api访问数据了。

当您需要通过客户端 js 从视图中获取动态数据时,在您的视图 dom 中添加 data-attrs,然后从 dom API 或其他 3rd 方 js API 中读取它。

【讨论】:

【参考方案2】:

为了将信息从 ruby​​ 传递到 javascript,您可以使用这个 gem:Gon,基本上它会转换 ruby​​ 变量并使它们在每个视图上都可用于 javascript,看看: http://railscasts.com/episodes/324-passing-data-to-javascript 如需任何其他替代方案来实现您的目的,请访问:https://www.ruby-toolbox.com/categories/javascript_tools#paloma

【讨论】:

以上是关于Rails - 将信息从视图传递到 Javascript的主要内容,如果未能解决你的问题,请参考以下文章

Rails 将@variable 从一个显示页面传递到另一个显示页面

在 ruby​​ on rails 中将参数从视图传递到控制器

将信息从一个集合视图传递到另一个更详细的集合视图的最佳方法是啥

codeigniter 将数据从视图传递到模型并检索信息

如何将核心数据信息从表视图传递到视图控制器?

如何通过委托将信息从键盘视图控制器传递到主视图控制器