Ir para conteúdo


Foto

findRecord retornando null

findRecord store null

Melhor Resposta Wemerson Januario , 13 July 2016 - 23:00

Wemerson, mas pra eu conseguir fazer isso, terei que mudar o tipo do dado do meu model, né? 

Faça como o Legolas disse, adicione mais um campo no model, e coloque não esqueça de colocar persist: false nele para não escrever ele quando for salvar o model.

Visualizar todo o conteúdo do post


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

#1 Marcelo Augusto

Marcelo Augusto

    Member Avançado

  • Membros
  • PipPipPip
  • 232 posts
  • LocationCaicó, Rio Grande do Norte

Postado 30 May 2016 - 10:02

Olá, pessoal

 

Na minha aplicação eu possuo um produto e esse tem um relacionamento do tipo hasOne com um material. Ao renderizar o grid, eu gostaria que na coluna que mostra o material, viesse o nome daquele material e não o id. Tentei usar o findRecord(), mas ele está retornando o valor null. No entanto, se eu der um refresh na página o nome do material é renderizado. 

 

Código da coluna do grid que contém o findRecord

{
	width: '7%',
	dataIndex: 'tipoMaterial',
	text: 'Material',					
	align: 'center',
	renderer: function(value, metaData, record) {
		var materiaisStore = Ext.getStore('materiais');												
		var material = materiaisStore.findRecord('id', value);					
		return material != null ? material.get('name') : value;
        }
}

Agradeço desde já.



#2 Wemerson Januario

Wemerson Januario

    Administrador Ext JS Brasil

  • Administrators
  • 839 posts
  • LocationGoiânia - GO

Postado 30 May 2016 - 12:24

traz isso do banco com inner join e seja feliz. Traz a coluna da descrição já no select e coloca no dataIndex da column. Dai não precisa de ficar fazendo renderer prato todos relacionamento.


  • ratamiette curtiu isso

Wemerson Januario
http://wemersonjanuario.com.br
Twitter: @januariocoder

 

Treinamento e Consultoria Ext JS. Qualifique-se já!


#3 Marcelo Augusto

Marcelo Augusto

    Member Avançado

  • Membros
  • PipPipPip
  • 232 posts
  • LocationCaicó, Rio Grande do Norte

Postado 13 July 2016 - 10:52

Wemerson, mas pra eu conseguir fazer isso, terei que mudar o tipo do dado do meu model, né? 



#4 Legolas

Legolas

    Ext JS - Admin

  • Administrators
  • 3497 posts
  • LocationBelo Horizonte

Postado 13 July 2016 - 20:30

Wemerson, mas pra eu conseguir fazer isso, terei que mudar o tipo do dado do meu model, né? 

Nesse caso você teria mais uma propriedade no seu Model com o valor do nome do material.


  • Marcelo Augusto curtiu isso

"A verdadeira vitória não é derrotar alguém forte... É ser capaz de proteger alguém que você ama de verdade!" (Maito Dai)


#5 Wemerson Januario

Wemerson Januario

    Administrador Ext JS Brasil

  • Administrators
  • 839 posts
  • LocationGoiânia - GO

Postado 13 July 2016 - 23:00   Melhor Resposta

Wemerson, mas pra eu conseguir fazer isso, terei que mudar o tipo do dado do meu model, né? 

Faça como o Legolas disse, adicione mais um campo no model, e coloque não esqueça de colocar persist: false nele para não escrever ele quando for salvar o model.


  • Legolas e Marcelo Augusto curtiram isso

Wemerson Januario
http://wemersonjanuario.com.br
Twitter: @januariocoder

 

Treinamento e Consultoria Ext JS. Qualifique-se já!


#6 Marcelo Augusto

Marcelo Augusto

    Member Avançado

  • Membros
  • PipPipPip
  • 232 posts
  • LocationCaicó, Rio Grande do Norte

Postado 14 July 2016 - 07:30

Legal a dica, muito obrigado Legolas e Wemerson.


  • Wemerson Januario curtiu isso

#7 Legolas

Legolas

    Ext JS - Admin

  • Administrators
  • 3497 posts
  • LocationBelo Horizonte

Postado 14 July 2016 - 07:42

Legal a dica, muito obrigado Legolas e Wemerson.

Por nada meu caro.


"A verdadeira vitória não é derrotar alguém forte... É ser capaz de proteger alguém que você ama de verdade!" (Maito Dai)


#8 Marcelo Augusto

Marcelo Augusto

    Member Avançado

  • Membros
  • PipPipPip
  • 232 posts
  • LocationCaicó, Rio Grande do Norte

Postado 14 July 2016 - 10:27

Wemerson e Legolas,

 

Tenho um grid na minha aplicação que mostra horários justificados pelos usuários. Pra que fique mais destacado qual horário um usuário justificou, eu busco o ponto com valor original e comparo os horários com os do justificado. No evento renderer do grid com valores justificados, se algum horário diferir do ponto batido, eu aplico um css. O problema é que tem duas stores envolvidas ai, a dos pontos e das justificativas.

A store dos pontos mostra para o usuário apenas os últimos 5 pontos que ele bateu. Se por um acaso eu abrir o grid que mostra esses pontos e em seguida abrir o grid das justificativas, a store que vem com os pontos só tem 5 registros. Na hora de procurar o ponto pra comparar os valores é retornado esse erro. 

Eu já tentei buscar a instância que ainda estava aberta no grid dos pontos e fazer um load passando por parâmetros um limit maior, mas não da certo.

initComponent: function() {
        var me = this;
        var other = Ext.getStore('pontoeletronico');
        
        if(Ext.isString(me.store)) {
			me.store = Ext.create('Packt.store.ponto_eletronico.Justificativas');
		}

        if(other == undefined || other == null) {                        
            other = Ext.create('Packt.store.ponto_eletronico.PontoEletronico');
            other.load({
                params: {
                    start: 0,
                    limit: 100000,
                },                
            });                        
        } else {            
            other.load({
                params: {
                    start: 0,
                    limit: 100000,
                }
            });            
        }
        
        Ext.apply(me, {                     
            columns: {
                defaults: {
                    align: 'center'                    
                },                
                //ESCREVENDO AS COLUNAS COMO ITENS PODE-SE DEFINIR UMA CONFIGURAÇÃO PADRÃO PARA TODOS OS ELEMENTOS
                items: [
                    {
                        text: 'Servidor',                        
                        dataIndex: 'nomeUsuario',                                                
                        hidden: true                        
                    },
                    {      
                        xtype: 'datecolumn',
                        format: 'd/m/Y',              
                        text: 'Ponto',                         
                        dataIndex: 'dataPonto'                        
                    },
                    {
                        xtype: 'datecolumn', 
                        format: 'H:i:s', 
                        text: 'Entrada/1º Exp.', 
                        dataIndex: 'entrada01',                                                
                        renderer: function (value, metaData, record) {                            
                            var ponto = other.findRecord('id', record.get('idPonto')),
                                pontoFormat = Ext.Date.format(ponto.get('entrada01'), 'H:i:s'),
                                valueFormat = Ext.Date.format(value, 'H:i:s');
                            if (valueFormat != pontoFormat) {
                                metaData.tdAttr = 'style="background-color:#5DFF4F;color:#3300FF;border-left:2px solid #3300FF;"';
                            }
                            return value ? Ext.Date.format(value, 'H:i:s') : '--:--:--';
                        }
                    },
                    {
                        xtype: 'datecolumn', 
                        format: 'H:i:s', 
                        text: 'Saída/1º Exp.', 
                        dataIndex: 'saida01',                                                
                        renderer: function (value, metaData, record) {
                            var ponto = other.findRecord('id', record.get('idPonto'));

                            if (value != ponto.get('saida01')) {                                                                
                                metaData.tdAttr = 'style="background-color:#5DFF4F;color:#3300FF;border-left:2px solid #3300FF;"';                                      
                            }                            
                            return value ? Ext.Date.format(value, 'H:i:s') : '--:--:--';
                        }
                    },
                    {
                        xtype: 'datecolumn', 
                        format: 'H:i:s', 
                        text: 'Entrada/2º Exp.', 
                        dataIndex: 'entrada02',                                                
                        renderer: function (value, metaData, record) {
                            var ponto = other.findRecord('id', record.get('idPonto'));

                            if (value != ponto.get('entrada02')) {                                
                                metaData.tdAttr = 'style="background-color:#5DFF4F;color:#3300FF;border-left:2px solid #3300FF;"';                                                                                                                                                                          
                            }
                            return value ? Ext.Date.format(value, 'H:i:s') : '--:--:--';
                        }
                    },
                    {
                        xtype: 'datecolumn', 
                        format: 'H:i:s', 
                        text: 'Saída/2º Exp.', 
                        dataIndex: 'saida02',                                                
                        renderer: function (value, metaData, record) {     
                            var ponto = other.findRecord('id', record.get('idPonto'));

                            if (value != ponto.get('saida02')) {
                                metaData.tdAttr = 'style="background-color:#5DFF4F;color:#3300FF;border-left:2px solid #3300FF;"';
                            }                       
                            return value ? Ext.Date.format(value, 'H:i:s') : '--:--:--';
                        }                        
                    },
                    {xtype: 'datecolumn', format: 'd/m/Y', text: 'Data (Justificativa)', dataIndex: 'dataJustificativa'}
                ]                
            },                                                
            forceFit: true,                                             
            dockedItems: [
                {
                    xtype: 'pagingtoolbar',
                    store: me.store,
                    dock: 'bottom',
                    displayInfo: true,
                    emptyMsg: 'Não existem registros a serem exibidos',
                    displayMsg: 'Mostrando {0} - {1} de {2} registro(s)'
                }
            ]
        });
        me.callParent(arguments);
        //me.store.load();
    }

Ficou um pouco extensa a explicação, mas espero que possam entender..



#9 Wemerson Januario

Wemerson Januario

    Administrador Ext JS Brasil

  • Administrators
  • 839 posts
  • LocationGoiânia - GO

Postado 14 July 2016 - 10:51

Parece ser que você está usando a mesma estância do store em mais de uma tela. isso cheira store com storeId definido.
 
Mais um motivo que não gosto de MVC, hehe.
 
Evite isso. Ext.getStore('pontoeletronico');
 
Como está no Ext 4 e usa MVC ao inves de MVVM. evite definir os stores nos componentes como string 
 
tipo
 
xtype: 'grid,
store: 'MeuStoreIdAqui'
 
 
garanta que cada componente use um estancia unica
 
xtype: 'grid,
//Sempre configure os stores assim no mvc
store: {
type: 'alias-do-meu-store'
}'
 
Também evite de usar Ext.create no store nos construtores(prototype)
 
Espero ter ajudado.

Wemerson Januario
http://wemersonjanuario.com.br
Twitter: @januariocoder

 

Treinamento e Consultoria Ext JS. Qualifique-se já!


#10 Marcelo Augusto

Marcelo Augusto

    Member Avançado

  • Membros
  • PipPipPip
  • 232 posts
  • LocationCaicó, Rio Grande do Norte

Postado 15 July 2016 - 07:24

Blz, Wemerson, defini a store conforme você recomendou, mas quanto ao Ext.getStore('pontoeletronico'), preciso dessa store para comparar os pontos dela com as justificativas. É justamente aí que o problema acontece. Como ela vem de outro grid que possui filtro, na hora de buscar os pontos, a store vem filtrada e eles não são encontrados. 



#11 Marcelo Augusto

Marcelo Augusto

    Member Avançado

  • Membros
  • PipPipPip
  • 232 posts
  • LocationCaicó, Rio Grande do Norte

Postado 15 July 2016 - 09:02

Outra coisa que percebi após fazer as mudanças que você sugeriu, foi que o grid não modifica os dados quando eu mudo de página ou atualizo, sempre permanece os dados da primeira página; mesmo o json sendo retornado corretamente.







Tópicos que também usam as tags findRecord, store, null:

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

0 membros, 0 visitantes, 0 membros anônimos