2010-05-31 50 views

回答

6

你必须了解你的观点,即Ruby代码获取服务器上执行 - 在页面上任何JavaScript获取执行变更之前。

这就是为什么你不能做这样的东西:

<script> 
    var js_var = 1; 
</script> 

<%= get_value_of_js_var_somehow %> 

反过来想它的工作原理:

<script> 
    var js_var = <% generate_value_with_ruby %>; 
    do_something_in_javascript_with_js_var(); 
</script> 
+1

,这里是一个很简单的例子,如何“do_something_in_javascript” - http://stackoverflow.com/questions/6835512/how-to-set-a-导轨-可变等于对一个的JavaScript变量 – 2012-12-12 05:28:59

4

你可以通过JavaScript变量使用AJAX轨道。例如,如果你想从你的JavaScript可以执行以下代码通过ID为一个用户的方法在Rails控制器:

<script> 
    var id = 1; 
    <%= remote_function :url => {:controller=>'controller_name', :action=>'method_name'}, :with => "'user_id=' + id" %> 
</script> 

您将通过POST请求得到的变量,作为参数。您可以使用params[:user_id]访问它。

def method_name 
    if params[:user_id].exists? 
    u = User.where('id = ?', params[:user_id]).first 
    end 
    puts u.path 
end 

希望我已经回答了您的问题。

0

如果您在更高版本的javascript(本身:application.js)中有此JavaScript变量,那么您始终可以在视图中引用它。

#application.js 
var someVar = "Hello World"; 
在您的视图(在客户端执行)

然后,你可以到...

<script type='text/javascript'> 
    alert(someVar); 
</script> 

我认为我们需要更具体的ellaboration如果这三个职位的人不回答你的问题。

-1

假设我们有如下脚本

<script type="text/javascript"> 
    var a="some value"; 
    document.getElementById('tagid').innerHTML='<%= tag(:div,content_tag(:p,' " +a+ " '), :id=>' " +a+ " ', name=>"somename") %>'; 
</script>