Foro

Llenar combos anidados a partir de los datos de un ajax request? EXTJS

0
Hola!
Tengo una serie campos de un formulario que estoy llenando mediante un Ajax Request en EXTJS.

Estos campos corresponden a datos que estan en una base de datos de los cuales les mando un DNI o similar y el SQL retorna desde nombres hasta ids (numero que despues sera usados para llenar combos).

Ejemplo: El codigo de la una region en un combo lo lleno de esta manera. 

//Ext.getCmp('cmb_nuevoRegion').setValue(datos.rows[0].regi_codigo);

Ahi obtengo el ID que me permite llenar a partir de la region un combo de provincia.

/{
                                                                xtype: "combo",
                                                                fieldLabel: "Provincia",
                                                                name: "cmb_nuevoProvincia",
                                                                id: "cmb_nuevoProvincia",                                          
                                                                disabled:true,
                                                                hiddenName: "combovalue",
                                                                emptyText: 'Seleccione...',
                                                                mode        : 'local',
                                                                store       :store_provincia,  
                                                                displayField:'provincia_nombre',
                                                                valueField  : 'provincia_codigo',
                                                                triggerAction: 'all',
                                                                listeners:{
                                                                    select: function(combo,record,index){


                                                                        var region_codigo = form_nuevoContrato.getForm().findField('cmb_nuevoRegion').getValue();
                                                                        var provincia_codigo = form_nuevoContrato.getForm().findField('cmb_nuevoProvincia').getValue();
                                                                        Ext.getCmp("cmb_nuevoProvincia").setValue(record.get('provincia_nombre'));
                                                                        form_nuevoContrato.getForm().findField('cmb_nuevoComuna').enable();

                                                                        store_comuna.load({
                                                                            params:{
                                                                             region_codigo: region_codigo,
                                                                             provincia_codigo: provincia_codigo,
                                                                             opcion:'comuna'

                                                                         }
                                                                     });


                                                                    }
                                                                } 
                                                            }

 


En esa seccion se llena el combo de provincia desde un store_provincia (q consulta un SQL) a partir del codigo obtenido de la region desde el ajax request.

Hasta ahi todo bien, carga los datos cuando clickeo el combo, pero yo necesito otra cosa aparte.

Los datos de la region obtenidos del ajax request se cargan al presionar un boton "buscar", el cual carga muchos datos existentes en la base de datos hacia el formulario como son nombres, direcciones etc. como explique al inicio.

Todos cargan bien, pero lo que no me carga bien es la seccion de la region provincia y comuna q son combos anidados. Solo carga bien region ya q es el primero codigo integro q obtengo, pero necesito que los combos anidados de provincia y comuna se carguen tambien con su nombre a partir del codigo obtenido de la db, pero no se como ejecutar esa llamada al store y obtener el dato para mostrarlo en el combo al cargar el ajax.


De momento cargan asi:

Region = NOMBRE DE LA REGION

Provincia = 2

Comuna = 6


La region carga su nombre por que lee su codigo, consulta al store de region y lo muestra, pero provincia y comuna me quedan cargados con los numeros pero no hacen la llamada a sus respectivos stores (quizas por la asincronia de ajax).

Intento con esto pero no esta bien, no se como hacerlo.

                                          Ext.getCmp('cmb_nuevoRegion').setValue(datos.rows[0].regi_codigo);
                                          //Ext.getCmp('cmb_nuevoProvincia').setValue(datos.rows[0].prov_codigo);
                                          //Ext.getCmp('cmb_nuevoComuna').setValue(datos.rows[0].comu_codigo);

                                        

                                          store_provincia.load({
                                            params:{
                                                region_codigo: datos.rows[0].regi_codigo,
                                                opcion:'provincia'
                                            }
                                        });


                                         var registro = Ext.getCmp('store_provincia').getAt(0); 
                                          Ext.getCmp('cmb_nuevoProvincia').setValue(registro);

                                          Ext.getCmp("cmb_nuevoProvincia").setValue(record.get('provincia_nombre'));
                                          Ext.getCmp('cmb_nuevoComuna').setValue(datos.rows[0].comu_nombre);
Alguno podria guiarme como poder cargar automaticamente los combos anidados a partir de sus valores obtenidos en un ajax request llamando a sus stores?

Muchas gracias a todos!

 


0
Se me olvido colocar la seccion del como region para q vean como se carga provincia.

{
                                                                xtype: "combo",
                                                                fieldLabel: "Región",
                                                                name: "cmb_nuevoRegion",
                                                                id: "cmb_nuevoRegion",
                                                                hiddenName: "combovalue",
                                                                emptyText: 'Seleccione...',
                                                                mode        : 'local',
                                                                store       :store_region,  
                                                                displayField:'region_nombre',
                                                                valueField  : 'region_codigo',
                                                                triggerAction: 'all',
                                                                listeners:{
                                                                    select: function(combo,record,index){
                                                                        form_nuevoContrato.getForm().findField('cmb_nuevoProvincia').enable();
                                                                        store_provincia.load({
                                                                            params:{
                                                                                region_codigo:form_nuevoContrato.getForm().findField('cmb_nuevoRegion').getValue(),
                                                                                opcion:'provincia'
                                                                            }
                                                                        });
                                                                    }
                                                                } 


                                                            }

 

Camilo Navarrete: Logre solucionarlo colocando unos if dentro del ajax request cargando los store load() con los parametros y dentro de un callback: function (records, options, success) 28/08/2017
Crysfel Villa: Excelente! 28/08/2017

¿Conoces a alguien que pueda responder esta pregunta? Comparte el link en Twitter o Facebook

Es necesario registrarse para poder participar en el foro! Si ya tienes una cuenta puedes entrar y comentar en este foro.