Can*_*mak 0 jquery-select2 select2-rails
我正在使用带有Rails和Mongoid的Select2,我在服务器端有Sunspot Solr来进行搜索.我正在尝试的是通过solr从mongo过滤数据,通过ajax请求获取数据并根据父子层次结构对结果进行分组.我无法弄清楚的是当我搜索一个孩子时,如果有多个子结果,则父类别会多次出现.请阅读以下内容了解更多信息:
这是我在Mongo DB中的数据
{"_ id":ObjectId("5209eb465a721ae827c661de"),"title":"BinaKanalizasyonTesisatı","parent":"SuTesisatçılığı","path":"sutesitati/kanalizasyon"}
{"_ id":ObjectId("5209eb465a721ae827c661df"),"title":"Daire TemizSuTesisatı","parent":"SuTesisatçılığı","path":"sutesisati/temizsu"}
{"_ id":ObjectId("5209eb465a721ae827c661e0"),"title":"Musluk Tamiri","parent":"SuTesisatçılığı","path":"sutesitati/musluktamiri"}
这是我的Rails模型
class Category
include Mongoid::Document
include Sunspot::Mongoid2
searchable do
text :title
end
field :title, :as => :title_textp
field :parent
field :path
end
Run Code Online (Sandbox Code Playgroud)
这是我的Rails控制器
class CategoriesController < ApplicationController
respond_to :html, :json
def list_styles
search = Category.search do
fulltext params[:q]
end
search = Category.search { keywords params[:q]; paginate :page => params[:page], :per_page => params[:page_limit] }
@results = search.results
@total_lines = search.total
@categories = @results
respond_with @categories
end
end
Run Code Online (Sandbox Code Playgroud)
这是我的Haml View
= f.label :category
= f.hidden_field :category, class: 'input-block', placeholder: "Lütfen almak istedi?iniz hizmet türünü seçiniz"
Run Code Online (Sandbox Code Playgroud)
这是我想要弄清楚的Javascript
$('#itinerary_category').select2({
minimumInputLength: 3,
ajax: {
url: "/categories/list_styles",
dataType: 'json',
quietMillis: 100,
data: function (term, page) {
return {
q: term,
page_limit: 10,
page: page,
};
},
results: function (data) {
var results = [];
$.each(data, function(index, item){
results.push({
text: item.parent,
children: [{id: item._id, text:item.title}]
});
});
return {
results: results
};
}
}
});
Run Code Online (Sandbox Code Playgroud)
当我运行服务器并进行搜索时,它可以正常运行一个项目的组

但是,当我进行显示多个项目的搜索时,组名称("SuTesisatı")也会显示两次.

我不希望组名显示两次,我无法弄清楚如何进行更改.我想要一个像这样的清单
Su Tesisatç?l???
Daire Temiz Su Tesisat?
Bina Kanalizasyon Tesisat?
Run Code Online (Sandbox Code Playgroud)
我不擅长js,也无法弄清楚如何解决它.有人可以帮帮我吗?我认为我提供的示例也增加了关于在select2中对远程数据进行分组的讨论,并明确说明如何将select2与rails + mongoid + solr + ajax一起使用.如果有人能够清除这一点,那么这将使select2更加强大,因为网上几乎没有明确的例子可以让它在使用ajax远程数据进行分组时工作.任何帮助将不胜感激.
在此代码中,您将为每个子项创建父项:
$.each(data, function(index, item){
results.push({
text: item.parent,
children: [{id: item._id, text:item.title}]
});
});
Run Code Online (Sandbox Code Playgroud)
相反,你应该按父母分组:
var hashtable={};
var results=[];
$.each(data, function(index, item){
if (hashtable[item.parent]===undefined) {
hashtable[item.parent]={text:item.parent, children:[]};
results.push(hashtable[item.parent]);
}
hashtable[item.parent].children.push({id:item._id,text:item.title});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2118 次 |
| 最近记录: |