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

问题描述:

我有一个rails应用程序,它提供了一些视图,其中包含来自数据库的特定数据,这些数据由一些javascript处理,专门用于Chartjs。如何在Rails 4中的JavaScript中包含ruby变量?

选项我已经探讨是:

  1. 使用Ajax调用提取数据关闭服务器。我不喜欢这个,因为用户没有改变任何数据,当我渲染页面时我可以访问所有的数据,应该有更好的方法。
  2. 在视图ERB中使用<script>标签,并且只需ERB插入变量。这似乎有点哈克,绝对没有利用我所有的美丽哈姆。但它很容易,并允许我将JavaScript变量放在页面上,然后可以在document.onload之后拾取。
  3. Gon。伟大的宝石,非常容易。但是,这是否真的需要宝石?

我觉得好像解决方案应该涉及资产管道和某种轨道插值,但我似乎无法使工作非常干净。什么是优雅的铁轨4解决这个问题的方法?

谢谢大家!

+3

有没有更好的办法......只是个人的品味;我个人使用GON(很多RABL或者仅仅是自己)。 Gem使得Json数据轻松地向客户端推送,没有任何开销。所以是的,这是值得的。 – zakelfassi

+0

您是否考虑购买JavaScript过滤器? http://haml.info/docs/yardoc/file.REFERENCE.html#javascript-filter 你能举个例子吗?这可能有助于更好地理解问题。 – Elyasin

有很多方法可以从服务器端的数据传递给JavaScript中,我将列出最常用的两个(不使用的宝石或其他外部工具)如下:

  1. 使用您描述的第二种方法,并在javsacript内插入ERB标签。这是丑陋的,哈克式的,甚至没有接近最佳实践。

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

在我看来,数据属性方法是最简洁的方法,这正是数据属性的目的。

现在,我不知道HAML,我只与雇员再培训局工作过,但我发现this answer by Mandeep,这也解释了如何添加数据属性您HAML:

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

OR

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

编辑:对不起,我发现你的问题与其他较新的,问题以来,我只是假设它是最近的,而不是一年前:)