如何在select2中获取动态下拉数据

时间:2013-10-15 12:23:52

标签: jquery ruby-on-rails twitter-bootstrap jquery-select2

在rails 4.0中,我使用的是select2(bootstrap)插件。我想在自动完成列表中生成动态数据,但数据未加载到列表中。 如果我使用下面的代码,我将得到一个错误,如“Uncaught TypeError:无法调用方法'toUpperCase'未定义”。

 $('#DIV_NAME').select2({
  placeholder: "Search for a names",
  multiple: true,
  minimumInputLength: 1,
  ajax: { 
    url: "autocomplete/names",
    dataType: 'json',
    data: function (term) {
      return { q: term };
   },
    results: function (data) {
      return {results: data};
    }
   }
 });

代码参考,http://ivaynberg.github.io/select2/#multi

从上面的链接中,我使用了名为select2.js的2个js文件,select2.min.js

在控制器方面,

def names
 @query = params[:q]
 @name_list = Keyword.where("value LIKE '%#{@query}%' AND category = 'Name'").limit(15)
 @names = @name_list.collect(&:value)
 @ids = @name_list.collect(&:id)
 @id_name_pairs = Hash[@ids.zip(@names)]

 @values = []
 @id_name_pairs.each_pair do |k, v|
   hash = {}
   hash["id"] = k
   hash["value"] = v
   @values.push(hash)
 end

 respond_to do |format|
   format.html{}
   format.js {
     render :json => @values
   }
 end

end

请帮我解决这个select2问题。

1 个答案:

答案 0 :(得分:0)

问题出在您的控制器中。您正在为json响应的值散列中指定键名“value”,如果您没有进行自定义格式化而是指定“text”。

它在文档中:

http://ivaynberg.github.io/select2/#data_array

像这样的东西:

@id_name_pairs.each_pair do |k, v|
  hash = {}
  hash["id"] = k
  hash["text"] = v
  @values.push(hash)
end