Ir para conteúdo


Foto

[RESOLVIDO] Carregar Form a partir de uma Store


  • Por favor, faça o login para responder
2 respostas neste tópico

#1 jmflausino

jmflausino

    Novato

  • Membros
  • PipPip
  • 11 posts

Postado 07 October 2013 - 16:11

Boa Tarde Pessoal!

Travei, preciso de ajuda!

Pois bem, estou fazendo uma telinha para adicionar registros no banco de dados, para isto criei um form com os campos. A primeira coisa a se fazer é escolher um grau de parentesco do registro que vou inserir no banco de dados. Após selecionar o grau de parentesco num Combobox, é feita uma consulta no banco de dados e retornado um Json com alguns valores que preciso "sugerir" a quem estiver realizando a inclusão. Ou seja, seleciono um grau de parentesco do combo box, ex. FILHO, e com base nesse grau os valores para os outros campos são sugeridos, ou seja preciso setar esses valores nos campos, pois se não precisar alterar nada, quem estiver incluindo apenas clica em "salvar". O que eu fiz foi o seguinte:

Criei duas Stores, storeGrau que preenche o combobox, e storeParente, que é carregada passando o grau selecionado como parametro para retornar os valores "defaults":

var storeGrau = new Ext.data.Store({
        proxy: proxyGrau,
        reader: new Ext.data.JsonReader({
            root: 'resultado',
            id: 'grau'
        }, [{
                name: 'grau',
                mapping: 'grau'
            }, {
                name: 'descricao',
                mapping: 'descricao'
            }])
    });

    var storeParente = new Ext.data.Store({
        url: '../php/clipar/cliparControl.php?action=parente',
        reader: new Ext.data.JsonReader({
            root: 'resultado',
            id: 'id_parente'
        }, [{
                name: 'valindeter',
                id: 'valindeter',
                mapping: 'valindeter'
            }, {
                name: 'idade',
                id: 'idade',
                mapping: 'idade'
            }, {
                name: 'univer',
                id: 'univer',
                mapping: 'univer'
            }, {
                name: 'agregado',
                id: 'agregado',
                mapping: 'agregado'
            }])
    });

    var grau = new Ext.form.ComboBox({
        name: 'grau',
        store: storeGrau,
        minChars: 2,
        fieldLabel: 'Grau',
        emptyText: 'PROCURE UM GRAU',
        width: 300,
        mode: 'remote',
        valueField: 'grau',
        displayField: 'descricao',
        allowBlank: false,
        blankText: 'Selecione um Grau!',
        loadingText: 'Procurando...',
        triggerAction: 'all',
        listeners: {
            blur: function() {
                if (grau.getValue() != '') {
                    valindeter.setDisabled(false);
                    idade.setDisabled(false);
                    univer.setDisabled(false);
                    agregado.setDisabled(false);
                    inativo.setDisabled(false);

                    storeParente.load({
                        params: {
                            grau: grau.getValue()
                        }
                    });
                                        
                }
            }
        }
    });

    storeGrau.on({
        beforeload: function(obj, options) {
            obj.proxy.conn.url = '../php/clipar/cliparControl.php?action=listaGrau&grau=' + grau.getRawValue();
        }
    });


No evento blur combobox, dou um storeParente.load({ params: { grau: grau.getValue()}}); e a store é carregada com os dados do banco, neste momento o json retornado é o seguinte:

{resultado: [{"valindeter":"S","0":"S","idade":"","1":"","univer":"","2":"","agregado":"N","3":"N"}]}

E agora é que não sei mais o que fazer (também não sei se esta é a melhor maneira de se fazer, ainda não tenho muita experiência), eu não sei como pegar cada valor desse json "resultado" e setar no respectivo campo do form. Isto é possível ? Até tentei usar o método storeParente.getById('valor')  e passar no setValue(), mas não deu certo!

Não sei se fui claro, espero que sim!

Certo da atenção de todos

Josemar

#2 Leidson Dias

Leidson Dias

    Member Avançado

  • Membros
  • PipPipPip
  • 75 posts
  • LocationJoão Pessoa

Postado 09 October 2013 - 10:15

Olá,
você pode fazer da seguinte forma:

this.storeParente.on('load', function(opt, data) {
            this.storeParente.each(function(record, idx) {
                console.info(record.json); //Aqui você tem todo o objeto
                console.info(record.get('idade'); //Aqui você pode pegar por campo
                //Ai no seu form você seta os valores, ex:
                idade.setValue(record.get('idade');
            });
        }, this);

Caso você não tenha necessidade de criar uma store parente, você após selecionar o grau faz um Ext.ajax.request recolhe o Json e seta da mesma forma. Exemplo:

Ext.Ajax.request({
                        url: 'sua url',
                        scope: this,
                        params: {
                            grau: grau //valor pego da seleção la
                        },
                        success: function(response) {
                            var result = Ext.decode(response.responseText);
                            for(var i in result){
				if(typeof result[i] == 'object' && result[i].getValue()){
					idade.setValue = result[i].idade;
				}
			}
                            
                        }
});


Atenciosamente,

#3 jmflausino

jmflausino

    Novato

  • Membros
  • PipPip
  • 11 posts

Postado 09 October 2013 - 11:16

Leidson,

Muito Obrigado, sua resposta me fez atentar para a real necessidade de ser ter mais uma store, no caso storeParente. Então fiz seguindo a sua sugestão de fazer uma request, ficou bem melhor e funcionou perfeitamente! Nada como ouvir alguém com mais experiência. Agradeço mais uma vez sua atenção! Conte comigo quando precisar! (se eu puder/souber ajudar).

att,

Josemar




0 usuário(s) está(ão) lendo este tópico

0 membros, 0 visitantes, 0 membros anônimos