Problemas com Select Box - utilizando componente Select2
Olá pessoal, tudo bem? Esotu com um probleminha e gostaria de uma ajuda...
Possuo dois selects múltiplos no meu formulário, em que o segundo carrega os dados em dependência do primeiro select. Estou utilizando o componente SELECT2 (http://select2.github.io/select2/), para deixar tudo mais lindo e fácil para o meu cliente.
Lógica:
Meu primeiro select possui as opções: CASAS, APARTAMENTOS e LOJAS.
CASAS tem como opção -> 2 Quartos, 3 Quartos, 4 Quartos
APARTAMENTO tem como opção -> 1 Quarto, 2 Quartos, 3 Quartos, 4 Quartos
Loja tem como opção -> 1 Quarto
Quando seleciono o primeiro select CASAS, aparecem apenas as opções da mesma para seleção. Quando seleciono APARTAMENTOS, abre a opção de escolher as opções de ambos.
Até aí tudo bem. Porém, ao ALTERAR meu primeiro select, por exemplo, carregando a opção LOJA ou removendo a opção CASAS, ele some com os dados do segundo select.
Utilizo apenas uma classe para fazer todo o processo, já que tento trabalhar com reutilização de código.
Eis o código:
this.refresh=function(clear,onrefresh){
var self=this;
var conf = this.fieldconf();
var ent=conf.params.entity;
if(conf.params.beforeGetData){
pack(conf.params.beforeGetData)(this);
}
console.log(ent, self.filters);
admin.ajaxq.add({
url:webroot('dyn_mod/EntityAssoc/get_data'),
type:"post",
data:{
entity:ent ,
filters:JSON.encode(self.filters)
},
success:function(r){
var j=JSON.decode(r);
if(j.code==1){
//console.log(self.element);
if(clear){
self.element.find('select').children().remove();
self.element.find('select').select2('data',[]);
}
$(j.data.objects).each(function(index,item){
if(conf.params.renderOption){
var opt=pack(conf.params.renderOption)(this,item);
if(index==0){
opt.attr('selected','selected');
}
//opt.attr('selected', 'selected');
self.element.find('select').append(opt);
}
});
if(clear){
self.element.find('select').trigger('change');
}
if( onrefresh && !conf.params.multiple ) onrefresh();
if(self.value && self.value.length && clear){
self.element.find('select').select2('data',self.value);
}
if(self.selected){
if( self.element.find('select option[value="'+self.selected+'"]').length>=1 ){
self.element.find('select').val( self.selected );
self.element.find('select').trigger('change');
}
}else{
self.element.find('select').val(self.element.find('select option').first().val());
}
//se o select for multiple, ele entra aqui
if ( conf.params.multiple && !self.valueloaded){
self.valueloaded=true;
//carregando os valores selecionados
var assoc_model = conf.params.assoc_model;
var assoc_field = conf.params.assoc_field;
var assoc_entity = conf.params.entity;
var entity=getconfig().entity;
var id=self.getid();
admin.ajaxq.add({
url:webroot('diretorio/EntityAssoc/get_multiple_selecteds'),
type:'post',
data:{
"assoc_model":assoc_model,
"assoc_entity":assoc_entity,
"assoc_field":assoc_field,
"entity":entity,
"id":id
},
success:function(r){
var j = JSON.decode(r); // 2, 1
var thedata=[];
$(j.data.ids).each(function(index,id){
thedata.push({id:id,text:self.element.find('option[value="'+id+'"]').html()});
});
self.value=thedata;
self.element.find('select').select2('data',thedata);
if(onrefresh) onrefresh();
},error:function(){
}
});
}else{
if(onrefresh) onrefresh();
}
if(conf.params.onRefresh){
//pack(conf.params.onRefresh)(this);
}
}
},error:function(){
}
});
};
Alguém pode me auxiliar, para saber onde está o erro? Obrigado!
Discussão (0)
Carregando comentários...