如何将数据/变量从file_controller.rb传递给application.js

时间:2013-11-27 06:45:31

标签: javascript jquery html ruby-on-rails

我有

@send_variable = 'show value in alert' 

在控制器文件中。在application.js中,我想做类似的事情:

var receive_variable =  <%@send_variable %>; 
alert(receive_variable ); >>> screen show 'show value  in alert' 

我该怎么做?

4 个答案:

答案 0 :(得分:2)

@send_variable中的application.js将无法使用,因为它是一个javascript文件。但是,您可以选择在呈现操作模板后警告隐藏div中的值。

如下所示:

# Controller
def action
  @send_variable = 'show value in alert' 
end

# app/view/action.html.erb
# Note in your 'hidden' css class you need to set it to 'visibility: hidden;'
<%= "<div id='send_variable' class='hidden'>#{@send_variable}</div>" if @send_variable %>

# app/assets/javascripts/application.js
$(document).ready(function(){
  $(document).on('load', '#send_variable', function(evt) {
    alert($('#send_variable').text());
  });
});

另一种方法是在调用此操作的链接或按钮中使用remote: true。这样做会对操作进行ajax调用,您可以使用js格式来执行js操作视图模板。

如下所示:

# Controller
def action
  @send_variable = 'show value in alert' 

  respond_to do |format|
    format.js
    format.html
  end
end

# app/view/action.js.erb
alert("<%= j @send_variable %>");

答案 1 :(得分:1)

添加=打印

var receive_variable =  '<%= @send_variable %>';
alert(receive_variable );

或只是

alert('<%= @send_variable %>');

另外,检查http://javascript.crockford.com/code.html是否有JS约定

答案 2 :(得分:1)

在你的javascript中,你必须用引号括起实例变量(@send_variable)。

alert('<%=@send_variable%>');

假设@send_variable类似于整数,则引号不是必需的。

应该这样做。

答案 3 :(得分:1)

看看&#39; gon&#39; gem(https://github.com/gazay/gon),它允许你使用类似gon.variable_name = value的东西在rails代码中的任何地方设置javascript变量,然后在任何javascript中使用它,比如gon.variable_name。我曾经使用过上面提到的技术,但是&#39; gon&#39;使它变得更容易,因为它实际上充当rails和javascript之间的窗口