2011-04-13 88 views
5

我需要给控制器播种一个javascript变量。例如,如果我在视图代码如下 -发送javascript变量到rails?

... <script type="text/javascript"> 
      variable_test = 'hello' 
     </script> 
    ... 

我需要控制器到达variable_test一样 -

def hello 
@variable_test = #Some code 
# @variable_test => 'hello' 
end 

的观点是你好当然,和“一些代码”是我不知道该怎么做。

+0

创建隐藏字段,分配给该字段的值的js变量,用ajax发布这个hidden_​​field。 – 2011-04-13 20:45:22

回答

3

你不能将客户端代码发送给控制器,除非您获得或发布某种类型的内容。尝试使用jQuery的post或get方法。如果你不使用jQuery,那么你可以做这样的事情:

var variable_test = 'hello'; 
var el = document.createElement('script'); 
el.setAttribute('src', 'path_to_controller' + '?variable_test=' + variable_test); 
document.body.appendChild(el); 

然后在你的控制器,你会怎么做:

@varliable_test = params[:varliable_test] 

的语法可能有点过,但你的一般理念。

+0

用jQuery ajax请求解决。谢谢 :) – Ariel 2011-04-14 14:45:27

1

首先,您需要以某种方式调用控制器。要么数据在表单中,并且您提交表单,或者您使用javascript进行AJAX调用。在第一种情况下,您希望使用javascript为表单添加一个隐藏的输入,并使用所需的名称和值。在第二种情况下,您使用AJAX请求发送的数据需要包含您想要的名称 - 值对。如果不知道更多关于你在做什么的事情,我无法得到更具体的结果;您是提交表单还是使用AJAX,并且如果您使用的是AJAX,那么您使用的是JavaScript库,或者使用任何内置的Rails helpers for ajax(例如remote_function)。

无论采用哪种方式,您都希望结束包含名称 - 值对“varliable_test = hello”的请求。那么你只要做

@varliable_test = params[:varliable_test] 

访问您的控制器内的值。

(我必须还要注意,那想必你的意思是“可变”,而不是“varliable”,但显然这并不那么只要你保持一致影响功能。)

+0

我的意思是“可变”而不是“可变”。对不起拼写错误,我不是以英语为母语的人。 – Ariel 2011-04-14 13:59:39

0

我也在寻找这个问题的答案。在我的一个应用程序中,我需要从Google的Places Autocomplete中获取数据。这种方法看起来像一个完美的解决方案,我(信贷塔哈KP:How to pass a javascript variable into a erb code in a js view?

查看:

<script type="text/javascript"> 
    var variable_test = 'hello'; 
    $(document).ready(function() { 
    $('#model_variable_test').val(variable_test); 
    }); 
</script> 

... 

<%= form_for :model do |f| %> 
    ... 
    <%= f.hidden_field :variable_test %> 
    ... 
<% end %> 

控制器:

def hello 
    @variable_test = params[:model][:variable_test] 
end