【问题标题】:Generate JSON in Rails for JavaScript object parameter在 Rails 中为 JavaScript 对象参数生成 JSON
【发布时间】:2010-09-16 15:40:42
【问题描述】:

我正在尝试使用 canvasXpress HTML5 / JavaScript 库在我的 Rails 3 项目中生成图表。他们的charting API 使用 JSON 作为其构造函数中的参数之一。例如:

new CanvasXpress('canvas', /* JSON here */);

在 Rails 中,我将有一个视图,它将图表呈现为其整体输出的一部分。因此,用于创建图表的 JavaScript 将存在于视图中。

我不太确定如何让 Rails 生成 JavaScript 需要的 JSON。是否应该在局部视图中生成 JSON?

无论如何,举个例子就好了。

【问题讨论】:

    标签: javascript ruby-on-rails json


    【解决方案1】:

    我在类似情况下采取的路线是使用两个视图文件(一个操作)和两个请求来呈现第一个页面,然后是第二个用于图形的 json/data。 (我正在使用精彩的 HighCharts 库)

    在我们的例子中,确保在提供 json 所需的潜在繁重/长数据处理之前加载页面(包含所有导航、选项等)很重要。它还为我们提供了仅针对 JSON 的视图的好处。

    控制器:

    def show
      @graph = Graph.find(id)
      respond_to do |format|
        format.html do
          @variable_needed_for_html_layout = current_user.graphs
        end
    
        format.js do 
          @data = @graph.process_data
        end
      end
    end
    

    html 视图(show.html.erb) 只是呈现所有 html 标记并为 js 发出 ajax 请求(jquery):

      <script type='text/javascript'>
        $(document).ready(function(){
          $.getScript('<%= graph_path(@graph, :js) -%>');
        });
      </script>
      <div id="highchart"></div>
    

    js 视图(show.js.erb)然后完成所有繁重的工作:

     var chart = new Highcharts.Chart({
        chart: {
          renderTo: 'highchart',
        }
        ...
     });
    

    【讨论】:

    • 感谢您的示例。 JQuery getScript 评估中是否缺少某些内容?我的在那儿炸了……
    • 没关系。我通过“rake routes”发现 Rails 3 不需要 show,所以我使用的是 report_path 而不是 report_show_path
    • 哈,对不起。可能应该注意到那是 Rails 2.3。
    • 实际上,我意识到这个节目是因为我必须使用自定义路线。我将示例的模型名称更改为图形,但实际上是分析导致了一些我永远记不起的时髦路径(所以我覆盖了它)。
    • 在html视图中,我们可以使用$.getScript('');使用当前控制器和动作名称。
    猜你喜欢
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多