【问题标题】:How to include Ruby string in JavaScript如何在 JavaScript 中包含 Ruby 字符串
【发布时间】:2014-03-06 09:15:53
【问题描述】:

我有红宝石代码:

<%= "hello #{@namevar}" if condition %>

我可以通过以下方式在JS中包含ruby sn-p-

<script>
    var v1="<%= @user.name  %>"
</script>

但不能在 JavaScript 中嵌入之前的代码。

我尝试了以下方法:

var v2="<%= \"hello #{@namevar}\" if condition %>";

但是没有用。

谢谢。

【问题讨论】:

  • 你想做什么?根据条件将字符串分配给变量?
  • 我想让这个&lt;%= "hello #{@namevar}" if condition %&gt; 进入一个JS变量

标签: javascript ruby-on-rails embedding


【解决方案1】:

您的尝试几乎是正确的,但您不需要转义 ruby​​ 代码中的双引号:

var v2="<%= "Our funding ask is #{@startup.funding_ask_text}." if @startup.try(:funding_ask_text) %>";    

【讨论】:

  • 谢谢。这行得通。我没想到它会按照惯例工作。谢谢。
【解决方案2】:

资产管道

您不能在资产管道中包含 ruby​​ 代码

如果你想包含“裸”红宝石,你必须使用.js.erb 并将文件放在你的views 目录中。这样做的原因是因为资产管道可以是precompiled,这会使Ruby代码无用


变量

如果你想在你的 JS 中使用基于 rails 的数据,你必须首先在你的视图中渲染数据,然后从 JS 中调用它(就像 Bachan 的回答)

您可以为此使用Gon gem

【讨论】:

  • var v1="&lt;%= @user.name %&gt;" 根本不是问题。那你想说什么?
  • 我不想“说”任何事情——我试图告诉你一些关于如何在你的资产 JS 中包含变量的想法。在您的资产管道中包含裸露的 ruby​​ 代码是不好的做法,将来会导致问题
  • 好的。感谢您的详细说明。 +1
【解决方案3】:

在你的布局中添加一个 hidden_​​field

<%= hidden_field_tag 'user_name', @user.name%>

在脚本中

var v1 = $('#user_name').val()

【讨论】:

  • 这应该很简单。但是你给出了这样一个解决方案,我需要一个额外的 dom 元素!!!这绝对不是解决方案。
猜你喜欢
  • 1970-01-01
  • 2013-09-12
  • 2012-01-05
  • 2015-05-24
  • 1970-01-01
  • 2010-12-21
  • 2019-04-19
  • 1970-01-01
  • 2021-01-30
相关资源
最近更新 更多