【问题标题】:Setting additional data to Highchart series via <%= #{} %> works for integers but not Strings通过 <%= #{} %> 将附加数据设置为 Highchart 系列适用于整数,但不适用于字符串
【发布时间】:2015-06-26 02:27:06
【问题描述】:

我正在尝试通过 HighCharts 和 Ruby on Rails 为折线图的每个数据点创建自定义工具提示,以该线程的方式:

Set Additional Data to highcharts series

总结该线程,响应者建议通过哈希向系列输入额外数据。名为“myData”的自定义字段包含工具提示中使用的附加数据:

new Highcharts.Chart( {
...,
series: [{
         name: 'Foo',
         data: [ { y : 3, myData : 'firstPoint' },
                 { y : 7, myData : 'secondPoint' },
                 { y : 1, myData : 'thirdPoint' } ]
      }]
tooltip: {
     formatter: function() {
               return 'Extra data: <b>'+ this.point.myData +'</b>';
     }
} );

当 myData 的数据字段(即#{i.extraData})为整数时,我已成功使用该代码:

series: [{
data: [ <%@show.each do |i| %> { x: <%="#{i.year}, y: #{i.maturity}, 
                                 myData: #{i.extraData}"%>},<%end%>]    
}]

在这种情况下,我的折线图在 x 和 y 访问中正确显示,并且工具提示包含预期的 i.extraData 的整数。

但这是我的问题。假设我想要的自定义工具提示不是 i.extraData 之类的整数,而是一个字符串。在这种情况下,我的代码会中断。我尝试在#{i.extraData} 的字符串版本周围包含单引号,但我的代码仍然损坏。我不明白如何编辑这部分代码,以便 #{} 内的字符串进入哈希并可以被工具提示读取。

非常感谢您考虑我的问题!

【问题讨论】:

  • 您在控制台中遇到的错误是什么?
  • 我没有收到任何错误,只是无法加载图表。我也试过 但这也没有用。
  • 我的印象是,如果我要删除 myData 字段周围的单引号,我会在 jsfiddle.net/japanick/dWDE6/314 的 jsfiddle 中遇到同样的问题。我认为这是我使用 内部带有字符串的标签所面临的问题。请注意,这不是控制台中的错误,而是图表无法加载。
  • 由于您将数据从 Ruby 传递到 JavaScript(我认为?),也许 Ruby 的内置 JSON 模块将有助于解决格式化障碍。这是我首先要尝试的。
  • 这听起来很有趣。这是我的第一个 ruby​​ on rails 应用程序,所以我对 JSON 模块不太熟悉。可以详细说明吗?

标签: ruby-on-rails ruby highcharts


【解决方案1】:

我不熟悉 Highcharts,但这里有一个粗略的示例,说明如何使用 JSON 模块将 Ruby 数据转换为 JavaScript 友好(从解释器运行)。

require 'json'

chart_data = { 
  series: [{ 
    data: @show.map do |i| 
      { x: i.year, y: i.maturity, myData: i.extraData } 
    end
  }] 
}
chart_data.to_json

# => "{\"series\":[{\"data\":[{\"x\":0,\"y\":0,\"myData\":\"origin\"},{\"x\":1,\"y\":1,\"myData\":\"I'm linear... so far\"}]}]}"

【讨论】:

  • 非常感谢!让我的代码正常工作! { x: z: ""} 我认为问题出在 #{} 周围i.额外数据。我不知道它为什么起作用,但删除它解决了我的问题。
  • @dnl2114 "&lt;%= i.extraData %&gt;"&lt;%= "#{i.extraData}" %&gt; 都是有效的,但行为会因上下文而异。不过,字符串插值#{} 确实需要在 Ruby 字符串中才能工作 - 所以 "&lt;%= #{i.extraData} %&gt;" (这就是你的意思吗?)是......好吧,我想 ERB 会认为它是一个评论,因为它遇到了 @987654326 @ 字符串外的字符。
  • 超级有帮助!谢谢你解释。
【解决方案2】:
series: [{
data: [ <%@show.each do |i| %> { x: <%=#{i.year}%>, y: <%=#{i.maturity}%>, 
                                 myData: '<%=#{i.extraData}%>'},<%end%>]    
}]

试试这个

【讨论】:

  • 我很欣赏这个建议。奇怪的是,它没有奏效。我最初认为单引号可能会连接到字符串上,但即使像 这样的东西也没有用。
  • 另一个有趣的点是,如果我将 myData: 'String' 移到 标记之外,那么它会正确输入哈希。主要问题是我无法动态更改字符串。
  • 我的代码可以正常工作了! { x: z: ""} 我认为问题出在 #{} 周围i.额外数据。我不知道它为什么起作用,但删除它解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
  • 2016-07-13
  • 2020-04-24
  • 2018-09-26
  • 1970-01-01
相关资源
最近更新 更多