2014-08-28 28 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