在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问题。
答案 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