1

在 rails 4.0 中,我使用的是 select2(bootstrap) 插件。我想在自动完成列表中生成动态数据,但列表中没有加载数据。如果我使用下面的代码,我会收到类似“Uncaught TypeError: Cannot call method 'toUpperCase' of undefined”的错误。

 $('#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

从上面的链接中,我使用了 2 个名为 select2.js、select2.min.js 的 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 问题。

4

1 回答 1

0

问题出在您的控制器中。如果您不进行自定义格式设置,而是分配“文本”,您将在 json 响应的值哈希中分配键名“值”。

它在文档中:

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
于 2013-10-15T13:29:26.623 回答