Ir para conteúdo


Foto

Referências entre entidades - combobox

relacionamento referencia

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

#1 LMBelo

LMBelo

    Member Avançado

  • Membros
  • PipPipPip
  • 47 posts

Postado 13 June 2015 - 10:59

Pessoal, bom dia!

 

Estou com um problema: tenho uma entidade com relacionamento 1:1 e estou utilizando um combobox para selecionar a dependência. O problema é a forma em que o servidor retorna os dados, segue exemplo:

 

{type: 'TEmpresa', fields: [ FID: 1, FDesc: 'Emp. teste', FCNAE: { type: 'TCNAE', fields: [ FID: 1, FCod: 1011125 ] } ]}

 

A entidade CNAE está relacionada na entidade empresa. 

 

A configuração do model ficou da seguinte forma:

 

Ext.define('SISTEMA.model.Empresa', {
    extend     : 'SISTEMA.model.Base',
    requires: [       
        'SISTEMA.model.CNAE'  
    ],
    idProperty : 'FID',
    fields     : [
        { name: 'FID', type: 'int' },
        'FDesc',
        { name : 'FCNAE', reference : 'SISTEMA.model.CNAE' }
    ]
});

 

Consigo criar o combobox listando todos os cnae mas na hora de salvar ele está enviando no atributo FCNAE da empresa apenas o campo FCOD da entidade CNAE, e quando carrego um registro existente, no combobox ele carrega o objeto [object Object]

 

Alguma sugestão?



#2 Wemerson Januario

Wemerson Januario

    Administrador Ext JS Brasil

  • Administrators
  • 857 posts
  • LocationGoiânia - GO

Postado 13 June 2015 - 21:43

confesso que não entendi o problema


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

 

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


#3 LMBelo

LMBelo

    Member Avançado

  • Membros
  • PipPipPip
  • 47 posts

Postado 13 June 2015 - 23:18

confesso que não entendi o problema

Wemerson, acho que eu tenho problema em explicar problemas...  ;D  ;D  ;D

 

Na verdade já tenho uma ideia de como resolver, mas talvez você tenha uma dica melhor...

 

Quando eu seleciono um registro no combobox, ele retorna um campo do objeto, no caso a chave primária, porém preciso que ele retorne o objeto referenciado e não o campo com a chave primária.

 

O que fiz pra resolver foi, antes de persistir o objeto eu troco o conteúdo da referência obtendo o registro pelo método combobox.findRecordByValue(combobox.getValue());

 

Consegui esclarecer?



#4 Legolas

Legolas

    Ext JS - Admin

  • Administrators
  • 3497 posts
  • LocationBelo Horizonte

Postado 15 June 2015 - 13:01

LMBelo, pelo que entendi você precisa da referência da record que foi selecionado no seu Combo. 
A forma que está fazendo é uma solução plausível para isso então ao meu ver é tranquilo, há outras formas de se resgatar a record selecionada através do método "getSelection".
Dica: Um ponto que se torna preocupante é a recursividade que poderá existir na hora de efetuar o encode do seu objeto para enviar para o server, pois a record é um objeto complexo então pode surtir problemas. Sendo assim, somente os dados da record devem ser viáveis para ti (não sei se somente eles são necessários), então recomendo utilizar o método "getData" da classe Ext.data.Model. ;)
 

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


#5 LMBelo

LMBelo

    Member Avançado

  • Membros
  • PipPipPip
  • 47 posts

Postado 15 June 2015 - 13:12

 

LMBelo, pelo que entendi você precisa da referência da record que foi selecionado no seu Combo. 
A forma que está fazendo é uma solução plausível para isso então ao meu ver é tranquilo, há outras formas de se resgatar a record selecionada através do método "getSelection".
Dica: Um ponto que se torna preocupante é a recursividade que poderá existir na hora de efetuar o encode do seu objeto para enviar para o server, pois a record é um objeto complexo então pode surtir problemas. Sendo assim, somente os dados da record devem ser viáveis para ti (não sei se somente eles são necessários), então recomendo utilizar o método "getData" da classe Ext.data.Model. ;)
 

 

Legolas, obrigado pela resposta.

 

Estou me atentando a esses detalhes e por acaso descobri outro problema.

 

Quando recebo esse objeto JSON do servidor, vi que o ext js cria um objeto(model) com esses dados. Achei estranho que ele criou somente para a entidade 'TEmpresa' e a entidade 'TCNAE' que está referenciada no objeto JSON continuou no mesmo formato... não deveria ter criado a model pro TCNAE também? Na estrutura descrita acima está especificado o relacionamento TEmpresa:TCNAE pelo atributo 'reference'



#6 Legolas

Legolas

    Ext JS - Admin

  • Administrators
  • 3497 posts
  • LocationBelo Horizonte

Postado 16 June 2015 - 07:54

LMBelo, me desculpe mas não entendi direito a sua dúvida referente ao texto abaixo:

 

Achei estranho que ele criou somente para a entidade 'TEmpresa' e a entidade 'TCNAE' que está referenciada no objeto JSON continuou no mesmo formato... não deveria ter criado esse objeto phantom pro TCNAE também?

 

Pelo que entendi você menciona que o seu objeto TCNAE não possuie a propriedade "phantom"?

Agora você que me deixou com dúvida, pois essa propriedade é utilizada internamente pelo framework para saber se o registro existe no banco de dados. No caso teria alguma particularidade para ti?


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


#7 LMBelo

LMBelo

    Member Avançado

  • Membros
  • PipPipPip
  • 47 posts

Postado 16 June 2015 - 10:39

LMBelo, me desculpe mas não entendi direito a sua dúvida referente ao texto abaixo:

 

 

Pelo que entendi você menciona que o seu objeto TCNAE não possuie a propriedade "phantom"?

Agora você que me deixou com dúvida, pois essa propriedade é utilizada internamente pelo framework para saber se o registro existe no banco de dados. No caso teria alguma particularidade para ti?

Rsrsrsrsrs...

 

É simples: ao receber um objeto json do servidor que possui relacionamento, para esse relacionamento não é criado o objeto "model" do ext js. No exemplo acima é criado o model para a entidade TEmpresa, mas para a entidade TCNAE que está aninhada no mesmo objeto JSON não é criado, mesmo informando o relacionamento.

 

Acho que o problema está no relacionamento entre as models. Parece que o Extjs não está conseguindo mapear corretamente as relações devido a estrutura do JSON.



#8 LMBelo

LMBelo

    Member Avançado

  • Membros
  • PipPipPip
  • 47 posts

Postado 16 June 2015 - 12:28

Rsrsrsrsrs...

 

É simples: ao receber um objeto json do servidor que possui relacionamento, para esse relacionamento não é criado o objeto "model" do ext js. No exemplo acima é criado o model para a entidade TEmpresa, mas para a entidade TCNAE que está aninhada no mesmo objeto JSON não é criado, mesmo informando o relacionamento.

Talvez se você ver fica mais fácil de entender...



#9 LMBelo

LMBelo

    Member Avançado

  • Membros
  • PipPipPip
  • 47 posts

Postado 16 June 2015 - 18:15

Criei um novo posto bem detalhado sobre o ocorrido. Segue o link: http://forum.extjs.c...ias-aninhadas/






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

0 membros, 0 visitantes, 0 membros anônimos