Ir para conteúdo


Foto

Dúvidas em relacão ao getView() e session no ExtJS 5.1.0


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

#1 fusca

fusca

    Novato

  • Membros
  • PipPip
  • 17 posts
  • LocationBelo Horizonte - MG

Postado 17 May 2015 - 22:15

Oi pessoal,

 

Tudo bem?

 

Será que alguém pode me ajudar em algumas dúvidas?

Sou nível beeem iniciante no ExtJS e atualmente estou usando a versão 5.1.0. A 5.1.1 saiu recentemente e vou em breve atualizar o sistema que estou desenvolvendo.

 

Estou seguindo o sistema que a @loiane fez para o seu livro "Mastering ExtJS - Second Edition" como exemplo e me deparei com duas situacões que não consigo resolver.

 

Veja o trecho de código abaixo:

 

    createDialog: function( record ) {
 
        var me = this,
            view = me.getView();
 
            me.dialog = view.add({
            xtype: 'user-form',
            viewModel: {
                data: {
                    title: record ? 'Editar ' + record.get('nome')  : 'Inserir Usuario'
                },
                links: {
                    currentUser: record || {
                        type: 'User',
                        create: true
                    }
                }
            },
            session: true //child session
        });
            
        me.dialog.show();
    },
 
Esta funcao obtêm a view atual atraves da linha "view = me.getView();" e mostra uma nova caixa de diálogo modal em relacão ao grid na tela. O que eu quero é exatamente isso, mas tendo como referência a view principal, pois o usuário pode clicar no botão de editar usuário novamente e uma nova caixa de diálogo aparece "em cima" da já criada. Se obtivéssemos a view principal, toda tela do sistema ficaria em modo modal e os botões de "CRUD" não funcionariam, evitando essa situacão indesejável.
 
Outra situacão que não entendo e não consigo resolver e o sincronismo dos dados da Store entre as telas de edicão e o grid criado. Ao entrar na tela de edicão dos dados, modifico o registro e após salvar, chamo a funcão refreshStore, mas os dados do grid não são atualizados.
 
    refreshStore: function() {
        var me = this;
 
        me.getStore( 'users' ).load();
    }
 
Acredito que seja um problema de session pois estou usando esse session na criacão da tela de edicão, mas é a única maneira de não dar erro ao abrir a tela de edicão.
 
Enfim, estou realmente perdido e travado no desenvolvimento deste sistema.
 
Quem puder me ajudar, agradeco desde já.


#2 Loiane

Loiane

    Member Avançado

  • Expert User
  • 1013 posts
  • LocationSão Paulo - SP

Postado 18 May 2015 - 18:43

Olá,

 

o getView nesse caso faz referência a tela de users. Se vc precisa da tela principal do aplicativo, precisa obter o Viewport (pra isso vc pode usar o ComponentQuery ou getView.up('viewport')).

 

Se vc está usando Session, precisa habilitar a session na Store tb, senão os dados não são sincronizados.


Autora dos livros:

Mastering Ext JS 5 http://bit.ly/1HWeHXh
Mastering Ext JS 4 http://bit.ly/14NZkxg

Ext JS 4: First Look http://bit.ly/o1IP1w
Sencha Architect http://bit.ly/19FVBGs
Curso ExtJS 4 Gratuito http://bit.ly/s5S0Oj (conceitos valem pro Ext 5 e 6 tb)


#3 fusca

fusca

    Novato

  • Membros
  • PipPip
  • 17 posts
  • LocationBelo Horizonte - MG

Postado 19 May 2015 - 20:31

Prezada Loiane,

 

Primeiramente, muito obrigado pela atencão prestada.

 

Fiz o que você me recomendou, mas não consegui sucesso. Substituí o código
 
view = this.getView(); pelo view = this.getView.up('viewport');
 
e obtive o erro no console: "Uncaught TypeError: me.getView.up is not a function"
 
Já o código view = this.getView('viewport'); não dá erro, mas também não surte o efeito desejado.
 
O que eu faco?
 
 
Sobre o session, retirando o código session do UserModel.js, do User.js e UserController.js, após selecionar o usuário de código 4 no grid e ao clicar no botao de edicão, aparece o seguinte erro apos a tela de edicao aparecer:
 
"Uncaught Error: Invalid record id returned for [email protected]"
 
Este erro só desaparece após a inclusão do session no User.js e no UserModel.js.
 
Detalhe que não incluí no grid a coluna ID, mas o ID é retornado do servidor no formato JSON.
 
Uma situacão interessante é que esse session está atrapalhando também o refresh das informacões do grid. Ao executar o código this.getStore( 'users' ).load();, o grid não é atualizado. Ele só é atualizado após o fechamento e reabertura da tab correspondente. Isso não é desejável pois a informacão do usuário no banco de dados pode alterar e o refresh não irá refletir a realidade do banco de dados.
 
Desde já, agradeco pela atencão.


#4 Loiane

Loiane

    Member Avançado

  • Expert User
  • 1013 posts
  • LocationSão Paulo - SP

Postado 20 May 2015 - 20:37

this.getView().up('viewport')

 

ou Ext.ComponentQuery.query('viewport')[0]

 

Olha, só recomendo usar Session se vc tiver muitos dados aninhados. Do contrário a Store é a melhor maneira de fazer pois é mt mais simples.


Autora dos livros:

Mastering Ext JS 5 http://bit.ly/1HWeHXh
Mastering Ext JS 4 http://bit.ly/14NZkxg

Ext JS 4: First Look http://bit.ly/o1IP1w
Sencha Architect http://bit.ly/19FVBGs
Curso ExtJS 4 Gratuito http://bit.ly/s5S0Oj (conceitos valem pro Ext 5 e 6 tb)


#5 fusca

fusca

    Novato

  • Membros
  • PipPip
  • 17 posts
  • LocationBelo Horizonte - MG

Postado 21 May 2015 - 14:30

Prezada Loiane,

 

Utilizei o "this.getView().up('viewport')", mas o objeto retorna NULL. Já o "this.getView.up('viewport')" não surte o efeito.

 

Em relação ao session, concordo com você. O problema é que estou usando o store, mas esse erro aparece sem motivo aparente.

 

Bem, vou estudar a documentação. Deve ser algum erro simples no código que deve ter passado despercebido.

 

Agradeço pela atenção.

 

Att.,

Fabiano






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

0 membros, 0 visitantes, 0 membros anônimos