如何在Rails 4中将Ruby变量包含在JavaScript中?

4
我有一个Rails应用程序,它提供了一些视图,这些视图包括从数据库中获取的特定数据,供某些JavaScript进行操作,特别是用于Chartjs。
我探索过的选项有:
1.使用ajax调用从服务器拉取数据。 我不喜欢这个选项,因为用户没有更改任何数据,当我呈现页面时,我可以访问所有数据,应该有更好的方法。
2.在视图ERB中使用<script>标签,简单地使用ERB插值变量。 这似乎有点投机取巧,肯定没有充分利用我美丽的Haml。 但它很容易,并允许我将javascript变量放在页面上,然后可以在document.onload之后捡起来。
3.Gon。 很棒的宝石非常容易。 但是这真的需要一个宝石吗?
我觉得解决方案应该涉及资产管道和某种rails插值,但我似乎无法使其非常干净。 什么是优雅的解决此问题的Rails 4方式?
谢谢大家!

3
没有更好的方式......这只是个人口味而已;我个人经常使用GON(很多时候与RABL一起使用,有时也单独使用)。这个gem使得向客户端推送JSON数据变得非常容易,没有任何额外的开销。所以,是值得的。 - zakelfassi
你考虑过查看JavaScript filter吗?http://haml.info/docs/yardoc/file.REFERENCE.html#javascript-filter能否给一个例子?这可能有助于更好地理解问题。 - Ely
1个回答

0

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

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

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

数据属性方法是我认为最干净的方法,它正是数据属性的目的。

现在,我不了解HAML,我只使用过ERB,但我发现this answer by Mandeep,其中解释了如何向您的HAML添加数据属性:

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

或者

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接