如何将参数传递给autocomplete_source jquery自动完成?

时间:2015-08-25 20:54:57

标签: ruby-on-rails jquery-autocomplete

我正在使用带有jquery-rails(3.1.0)和jquery-ui-rails(4.1.1)gems的Rails 4.0.2。我添加了自动填充,以便根据用户输入的内容和表单中的其他字段进行特定搜索。

表格:

 <%= text_field_tag :field , some_value,  data: { autocomplete_source: select_path( { :id => @order.Id , :type => @order.type } ) } %>

Form.js:

$('#field').autocomplete 
  minLength: 0
  source: $('#field').attr('data-autocomplete-source')  
  select: ( event, ui ) -> 
     $('#pedido_venda_CodTransp').val(ui.item.value)
     $('#transportadora_escolhido').val(ui.item.label)
     this.form.submit()
     false

...

控制器:

def select
   # retrieve parameters
   id_cliente = params[:id]
   retira_entrega = params[:type]
   term = params[:term]
   # do the query, etc...
end

当我运行代码时,一切正常。控制器接收所有参数并完美运行查询。 但是,参数 type 基于SELECT控件,为了更改它,我将以下代码放在SELECT控件中。

<%=  f.select :type, options_for_select( [['RETIRA','R'],['ENTREGA','E']] , @pedido.RetiraEntrega )  ,{}, {  :onchange => "change_type();" } %>

JS代码功能:

function change_type()
    {   

        var e = document.getElementById("type");
        var option = e.options[ e.selectedIndex ].value;
        var field = document.getElementById("field");
        var origem = "type=";
        source = field.attributes["data-autocomplete-source"].value;
        // pesquisa a string retira_entrega=
        index = source.search(origem);
        field.setAttribute("data-autocomplete-source", source.substring(0,index+origem.length) +  String(option)); 

    }

调用JS函数,运行最后一行,设置属性(我在最后检索属性时发出警报)。 问题是控制器永远不会收到更改的值(它总是在创建表单时收到值)。

所以,问题是:如何更改传递给自动完成的参数才能在rails控制器中使用?

1 个答案:

答案 0 :(得分:0)

不确定这是否是你想要的,但我正在努力解决同样的问题,因为我有两个输入字段,我希望在自动完成小部件中加载不同的列表。所以我所做的是将一个额外的参数传递给自动完成源,如下所示:

<!-- /_form.html.erb -->
    <%= f.text_field :auto1, :size => "100", class: "form-control", data: { autocomplete_source: root_path(:fieldType => "numerouno")} %>

    <%= f.text_field :auto2, :size => "100", class: "form-control", data: { autocomplete_source: root_path(:fieldType => "numerodos")} %>


然后在我的控制器中,我使用了额外的参数来确定我需要显示的列表:

if param[:fieldType] == "numerouno"
  format.json { render :json => @unoList}
elsif param[:fieldType] == "numerodos"
  format.json { render :json => @dosList }
else
  flash[:danger] = "Error loading list for autocomplete!"
end


param[:term]仍然存在!