Lançado Adianti Framework 8.1!
Clique aqui para saber mais
Problema entre TPage e TWindow com Componente Personalizado Olá. Criei um componente para mostrar mensagens em minha app. Ocorre que quando o utilizo nas telas que são do tipo TPage, funciona corretamente. Porém, quando tento usar em telas do tipo TWindow (Seeks), o componente acaba sendo renderizado na tela de trás. Em anexo os fragmentos de código e o print das telas. Obrigado pela ajuda. ...
MT
Problema entre TPage e TWindow com Componente Personalizado  
Olá.

Criei um componente para mostrar mensagens em minha app. Ocorre que quando o utilizo nas telas que são do tipo TPage, funciona corretamente. Porém, quando tento usar em telas do tipo TWindow (Seeks), o componente acaba sendo renderizado na tela de trás.

Em anexo os fragmentos de código e o print das telas.

Obrigado pela ajuda.


Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (6)


NR

Imagino que pelo fato do seu componente estar simplesmente fazendo um echo, sem ser atribuído efetivamente à twindow, a mensagem acabe ficando de fora dela, pois está sendo executada antes do término da renderização dos componentes.

Sugiro adaptar o componente para ficar parecido com o exemplo abaixo, com método construtor e método show:
https://www.adianti.com.br/framework-extensibility

Dessa forma, na TWindow você faria algo parecido com isso:
  1. <?php
  2. // extends TWindow
  3. parent::add(new Mensagem('info-erro-campos''300px''msg-marcaseek3-form-view'));
  4. ?>
MT

Obrigado.
MT

Olha só Rabaioli. Na verdade eu queria mesmo era usar o componente TAlert, do próprio framework. Isso iria simplificar e muito a minha vida aqui... O problema é que parece que ele está sempre um passo atrás para apresentar as mensagens que preciso. Por exemplo, quando clico em novo, ele não atualiza a mensagem correta na tela, somente quando clico uma segunda vez no botão "novo". Também quando clico em algum registro na grid da tela de listagem, a mensagem vem como se fosse para o novo registro, enfim... Há algum impasse na ordem de execução do TAlert com relação à ordem da tela que estou usando por acaso?

Olha só esse fragmento que, se funcionar adequadamente, seria o ideal pra minha app:

  1. <?php
  2.    
  3.      //construtor da TPage...
  4.         ...
  5.         parent::add(new TAlert('info'TSession::getValue('SESS-MSG-OPE')));  
  6.         parent::add$vbox );
  7.     }
  8.    //onEdit da TPage
  9.     public function onEdit($param
  10.     {
  11.         if (isset($param['key'])) 
  12.         {
  13.             try 
  14.             {
  15.                 //$this->loadMsg('info-edita', '650px', "msg-marca-form-view");
  16.                 TSession::setValue('SESS-MSG-OPE''Altere os campos e clique em salvar.');        
  17.                 TTransaction::open('lctdb');
  18.                 $obj = new Marca$param['key'] );
  19.                 $this->form->setData($obj);
  20.                 TTransaction::close();
  21.             } catch (Exception $e) {
  22.                 TTransaction::rollback();
  23.                 new TMessage('error'$e->getMessage());           
  24.             }    
  25.         }
  26.         else 
  27.         {
  28.             //$this->loadMsg('info-novo', '650px', 'msg-marca-form-view');
  29.             TSession::setValue('SESS-MSG-OPE''Preencha os campos e clique em salvar.');        
  30.             $this->form->clear();
  31.         }    
  32.     }
  33. ?>
NR

Marcelo, o construtor é chamado antes de qualquer função. Como a atualização do valor da sessão é feita em uma função chamada posteriormente, ela só será visualizada na próxima execução.
MT

Logo... Há algum componente no framework com comportamento de "Listener", que possa ser acionado com um método do tipo onFire() por exemplo?

NR

Acho que você pode usar o TAlert mesmo. No construtor adicione um container na posição desejada e deixe-o visível a toda classe com o $this.

Aí no seu método você adiciona o conteúdo que quiser nesse container. Ex:
  1. <?php
  2. // construct
  3. $this->divAlert = new TElement('div');
  4. parent::add($this->divAlert);
  5. // onEdit
  6. $this->divAlert->add( new TAlert('info','Texto') );
  7. ?>