如何在Rails 4中的javascript中包含ruby变量?

时间:2014-03-05 15:21:06

标签: javascript ruby-on-rails-4 asset-pipeline haml erb

我有一个rails应用程序,它提供了许多视图,其中包含来自数据库的特定数据,这些数据将被某些javascript操作,特别是用于Chartjs。

我探索的选项是:

  1. 使用ajax调用将数据从服务器中拉出。我不喜欢这个,因为用户没有更改任何数据,我在呈现页面时可以访问所有数据,应该有更好的方法。
  2. 在视图ERB中使用<script>标记,只需让ERB插入变量即可。这似乎有点hacky,绝对没有利用我所有美丽的haml。但它很简单,允许我在页面上放置javascript变量,然后可以在document.onload之后获取。
  3. 上Gon。伟大的宝石,非常容易。但这真的需要宝石吗?
  4. 我觉得解决方案应该涉及资产管道和某种轨道插值,但我似乎无法使这项工作非常干净。什么是优雅的轨道4解决这个问题?

    谢谢大家!

1 个答案:

答案 0 :(得分:0)

有很多方法可以将数据从服务器端传递到javascript,我将在下面列出两种最常见的(不使用gem或其他外部工具):

  1. 使用您描述的第二种方法,并在javsacript中插入ERB标记。这是丑陋的,hacky,甚至不接近最佳实践。

  2. 使用数据属性。您可以修改HAML以包含其他属性,例如“data-my-variable”,并通过javascript访问它(例如使用jQuery:$(element).data("my-variable"))。

  3. 在我看来,数据属性方法是最干净的方法,它正是数据属性的目的。

    现在,我不知道HAML,我之前只与ERB合作,但我找到了this answer by Mandeep,它解释了如何向HAML添加数据属性:

    %a{"data-my-variable" => "my data", href: "#"}
    

    %a{href: "#", :data => {:my_variable => "my data"}}
    

    编辑:抱歉,我发现您的问题以及其他更新的问题,我只是假设它是最近的问题,而不是一年多以前的问题:)