2011-04-13 189 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