如何将javascript变量传递给rails部分视图

时间:2016-08-26 07:00:07

标签: javascript ruby-on-rails

我有一个情况,有一个Javascript变量我需要传递给rails部分视图。

例如,在 test.html.erb

{:section => j sort_section_js[i]} %>"
{:section =>" + sort_section_js[i] + "}%>"

但是它一直在抛出语法错误,我尝试了很多方法,比如

ajax

我需要使用它,因为我想调用array动态更改def get_new_variable ... return new_variable end

更新

所以,也许我需要编写一个控制器

<script>
$('test').onclick(function(event) {
   //write some ajax call
   //get new_variable
   $('#test').empty();
   $('#test').append("<%= j render :partial => 'section_in_panel', :locals => {:section => raw new_variable} %>");
  });
)</script>

然后在 test.html.erb

flex: 1

这是正确的方向吗?

2 个答案:

答案 0 :(得分:1)

正如Alberto Juan在评论中写道,你不能在ruby代码中使用javascript变量。 Ruby代码将在javascript之前解释,并且不知道i是什么。

更新:您的更新无法使用您在javascript代码中使用的new_variable。

要在ajax调用后使用partial,请按照 link

中的说明操作

实施例

<强>项/ index.html.erb

<div class="grid">
  <% @categories.each do |cat| %>
    <%= link_to cat.name, fetch_items_path(:cat_id => cat.id), :remote => true %>
  <% end %>

  <%= render partial: 'item_grid', locals: { items: @items} %>
</div>

<强>的routes.rb

get "/fetch_items" => 'items#from_category', as: 'fetch_items'

<强> items_controller.rb

def index
    @items = Item.all
    @categories = Category.all
end

def from_category
    @selected = Item.where(:category_id => params[:cat_id])
    respond_to do |format|
        format.js
    end
end

<强>视图/项目/ from_category.js.erb

$("#items_grid").html("<%= escape_javascript(render partial: 'items_list', locals: { items: @selected } ) %>");  

答案 1 :(得分:0)

您可以使用gem gon或只是执行以下操作:

<script>
  MyVars[:someVar] = <%= some_value %>;
</script>

但是,我建议你将后端与前端代码分开并使用JSON将数据传递给JS。