上节说道tokenInput的基本使用,特别关注了onsend()方法,这里我需要说的是如何过滤select,也就是如果token_A 选择了 aaa选项,如果在token_B中过滤该选项,使搜索不到该结果,避免相同。这里是两个token不能相同item,也包括同一个token,不能同一个item。
这里我们就要使用到onSend方法,dom操作获取需要过滤的token,获得已经选的的item的id,以json格式,在后台处理,过滤搜索结果。
这样处理,就可以避免再次Dom处理不能相同值的问题,因为第二次,直接过滤了结果,搜索不到已经选中的item。
代码:
JS
$("#update_"+role+"_id_"+id_index).tokenInput("/test/tokenData.json", {
prePopulate:[
{id: id_index, name: name}
],
preventDuplicates: true,
theme: "facebook",
onSend: function(param1) {
var filterValueJson = {};
var index = 0;
$("#"+role+"_table").children("tbody").children("tr").each(function(){
if($(this).children("th").length > 0){
return true;
}
if($(this).children().first().children("span").length > 0){
filterValueJson["id_"+index]=$(this).children().first().children().first().text().trim()
}else if($(this).children().first().children().last().val().trim()!="") {
filterValueJson["id_"+index]=$(this).children().first().children().last().val().trim()
}
index++;
})
param1.data.filter = JSON.stringify(filterValueJson)
}
});
}
Controllers
def show
select_token_data
end
def select_token_data
var= "%#{params[:q]}%"
filterValue = JSON.parse(params[:filter])
filterIds = []
filterValue.each do |title|
if title[1].to_i.nil?
next
end
filterIds[title[0].split("_")[1].to_i] = title[1].to_i
end
filterIds = filterIds.blank?? "" : filterIds
@tokenData= TestData.select("id, name").where("id not in(?)", params[:q].to_i, var,filterIds).order("name")
respond_to do |format|
format.html
format.json { render :json=>@tokenData.map(&:attributes)}
end
end
以上例子中,token是使用在table中,每条记录,都会有tokeninput操作,所以对table进行了dom操作,这里可以灵活使用,获取需要过滤的tokeninput值,使用json方法,在后台进行过滤。
QQ:346600357
邮箱:oldlock1988@163.com