2014-08-28 62 views
-1

紅寶石2.0.0至控制器,導軌4.0.3傳遞實例變量從視圖通過JavaScript

時選擇年被觸發時,JavaScript的當前從視圖到經過實例變量(@car)的名稱控制器作爲字符串。我需要傳遞一個對實例變量的引用,而不僅僅是字符串名稱。這可能嗎?我會很感激幫助。

編輯:我已經嘗試更換汽車的引用如下,但我收到語法錯誤。

var car = $("#<%= @car %>"); 
Error: Syntax error, unrecognized expression: #<%= @car %> 

的觀點是:

<div class="span8"> 
    <%= simple_form_for [:admin, @car], 
         defaults: {label: false}, 
         html: {id: 'new_admin_car', class: 'form-vertical'}, 
         wrapper: :vertical_form, 
         wrapper_mappings: { 
           check_boxes: :vertical_radio_and_checkboxes, 
           radio_buttons: :vertical_radio_and_checkboxes, 
           file: :vertical_file_input, 
           boolean: :vertical_boolean 
         } do |f| %> 
     <%= f.input(:stock_number, {input_html: {form: 'new_admin_car', car: @car}, autocomplete: :off, placeholder: 'Stock number?'}) %> 
     <%= f.input(:ymm_year_id, {input_html: {form: 'new_admin_car', car: @car}, collection: YmmYear.all.order("year desc").collect{|c| [c.year, c.id]}, prompt: "Year?"}) %> 
     <%= render partial: "makes", locals: {form: 'new_admin_car', car: @car} %> 
     <%= render partial: "models", locals: {form: 'new_admin_car', car: @car} %> 
     <input type="submit" form="new_admin_car" value="Create Car" class="btn btn-default btn btn-primary"> 
    <% end %> 
</div> 

當前的腳本是:

// when the #year field changes 
$("#car_ymm_year_id").change(function() { 
    // make a GET call and replace the content 
    // First select identifies what has been selected, or fired 
    var year = $('select#car_ymm_year_id :selected').val(); 
    // Pull the variables from the input_html tag 
    var form = $('select#car_ymm_year_id').attr("form"); 
    var car = $('select#car_ymm_year_id').attr("car"); 
    // Routes to the controller action 
    $.post('/admin/cars/make_list/', 
     { 
      form: form, 
      year: year, 
      car: car 
     }, 
     function (data) { 
      $("#car_ymm_make_id").html(data); 
     }); 
    return false; 
}); 
+0

你的意思是從控制器傳遞var來查看?或者是你在JS中進行GET調用的地方? – Aryess 2014-08-28 09:41:36

+0

@car通過常規方法來自控制器的視圖。當年份發生變化時,JS會觸發並將選定年份傳回給控制器,以便它可以構建該年份的製造清單。當火災發生時,我需要通過JavaScript從視圖傳遞迴控制器的汽車實例。 – 2014-08-28 09:48:22

+0

@Aessess我認爲我的評論是錯誤的。往上看。 – 2014-08-28 10:04:58

回答

0

這種或那種方式,所有的JS可以發送/接收的字符串。您需要在應答POST調用時使用JSON編碼@car對象,並在回調函數中解析它。

在控制器:

@car = {} # do whatever you have to do to find the corresponding car 
respond_to do |format| 
    format.html 
    format.json { render :json => @car.to_json } 
end 

在您看來,別忘了你在你的POST請求調用的路徑的末尾添加.json。在這種情況下,我相信這將是/admin/cars/make_list.json,但您可能需要適應。

然後在你的JS輸出你的data變種在控制檯檢查它是一個原始字符串還是它是一個對象。我不記得jQuery是否自動解析它。如果它是一個原始字符串,將它傳遞給JSON.parse(your_var)以擁有一個有效的對象(as seen here

+0

你能提供一個如何完成它的例子嗎?謝謝。 – 2014-08-28 20:58:04

+0

我詳細說明了我的答案,請參閱上文 – Aryess 2014-08-29 07:06:32