Lançado Adianti Framework 7.6!
Clique aqui para saber mais
TCombo erro TForm::sendData com enableSearch ativado Olá, estou realizando um cadastro de endereços com a alimentação dos estados por um TDBCombo e interações dinâmicas para cidades, bairros, logradouros... todos com TCombo que são alimentados dinamicamente. Tudo está funcionando normalmente, quando o enableSearch está desativado. Porém, gostaria de usá-lo. Depois de um dia de testes, não encontrei o problema, somente descobri que...
LF
TCombo erro TForm::sendData com enableSearch ativado  
Olá, estou realizando um cadastro de endereços com a alimentação dos estados por um TDBCombo e interações dinâmicas para cidades, bairros, logradouros... todos com TCombo que são alimentados dinamicamente.

Tudo está funcionando normalmente, quando o enableSearch está desativado. Porém, gostaria de usá-lo.

Depois de um dia de testes, não encontrei o problema, somente descobri que quando desativo o enableSearch, tudo funciona normalmente.

Acho que não esclareci o que está aconcendo bem. Vou tentar ser bem claro:

Em uma lista, quando realizo a pesquisa, eu envio os dados dos critérios para a sessão, assim eu preciso utilizar o TForm::sendData para recarregar os combos, pois o setData não seria capaz de carregar dinamicamente. Realizo este processo. Tudo funciona normalmente, desde que o enableSearch não esteja habilitado. Estando habilitado, ele até volta o valor como selecionado, mas aparece inicialmente com o placeholder.

Se alguém puder me ajudar a sair deste problema.

Fiz o teste com a classe demonstração do tutor. Ocorre o mesmo problema, basta ativar e desativar o enableSearch que verão que com ele ativo, o sendData não é capaz de setar o selected para o combo.

  1. <?php
  2. /**
  3.  * FormInteractionsView
  4.  *
  5.  * @version    1.0
  6.  * @package    samples
  7.  * @subpackage tutor
  8.  * @author     Pablo Dall'Oglio
  9.  * @copyright  Copyright (c) 2006 Adianti Solutions Ltd. (http://www.adianti.com.br)
  10.  * @license    http://www.adianti.com.br/framework-license
  11.  */
  12. class FormInteractionsView extends TPage
  13. {
  14.     private $form;
  15.     
  16.     /**
  17.      * Class constructor
  18.      * Creates the page
  19.      */
  20.     function __construct()
  21.     {
  22.         parent::__construct();
  23.         
  24.         // create the form using TQuickForm class
  25.         $this->form = new TQuickForm('form_interaction');
  26.         $this->form->setFormTitle('Dynamic interactions');
  27.         $this->form->class 'tform';
  28.         
  29.         // create the form fields
  30.         $input_exit   = new TEntry('input_exit');
  31.         $response_a   = new TEntry('response_a');
  32.         $combo_change = new TCombo('combo_change');
  33.         $response_b   = new TCombo('response_b');
  34.         $response_c   = new TEntry('response_c');
  35.         $combo_change->enableSearch();
  36.         $response_b->enableSearch();
  37.         
  38.         $combo_items = array();
  39.         $combo_items['a'] ='Item a';
  40.         $combo_items['b'] ='Item b';
  41.         $combo_items['c'] ='Item c';
  42.         
  43.         $response_a->setEditable(FALSE);
  44.         $response_c->setEditable(FALSE);
  45.         $combo_change->addItems($combo_items);
  46.         $response_b->addItems($combo_items);
  47.         
  48.         // add the fields inside the form
  49.         $this->form->addQuickField('Input with exit action',    $input_exit200);
  50.         $this->form->addQuickField('Response A'$response_a200);
  51.         $this->form->addQuickField('Combo with change action'$combo_change200);
  52.         $this->form->addQuickField('Response B'$response_b200);
  53.         $this->form->addQuickField('Response C'$response_c200);
  54.         
  55.         $this->form->addQuickAction('View', new TAction(array($this'onView')), 'fa:search');
  56.         
  57.         // set exit action for input_exit
  58.         $exit_action = new TAction(array($this'onExitAction'));
  59.         $input_exit->setExitAction($exit_action);
  60.         
  61.         // set exit action for input_exit
  62.         $change_action = new TAction(array($this'onChangeAction'));
  63.         $combo_change->setChangeAction($change_action);
  64.         
  65.         // wrap the page content using vertical box
  66.         $vbox = new TVBox;
  67.         //$vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  68.         $vbox->add($this->form);
  69.         parent::add($vbox);
  70.     }
  71.     
  72.     /**
  73.      * Show data
  74.      */
  75.     public function onView()
  76.     {
  77.         // get form data
  78.         $data $this->form->getData();
  79.         
  80.         // send some data after post
  81.         $obj = new StdClass;
  82.         $obj->combo_change $data->combo_change// will fire change action
  83.         $obj->response_b $data->response_b;     // will update the value after the change action
  84.         
  85.         // send some data to form dynamically
  86.         TForm::sendData('form_interaction'$obj);
  87.         
  88.         // keep the form filled
  89.         $this->form->setData($data);
  90.         
  91.         new TMessage('info'str_replace(','',<br> 'json_encode($data)));
  92.     }
  93.     
  94.     /**
  95.      * Action to be executed when the user leaves the input_exit field
  96.      */
  97.     public static function onExitAction($param)
  98.     {
  99.         $obj = new StdClass;
  100.         $obj->response_a 'Resp. for '.$param['input_exit'].' at ' date('H:m:s');
  101.         $obj->combo_change 'a';
  102.         
  103.         TForm::sendData('form_interaction'$obj);
  104.         new TMessage('info''Message on field exit. <br>You have typed: ' $param['input_exit']);
  105.     }
  106.     
  107.     /**
  108.      * Action to be executed when the user changes the combo_change field
  109.      */
  110.     public static function onChangeAction($param)
  111.     {
  112.         $obj = new StdClass;
  113.         $obj->response_c 'Resp. for opt "'.$param['combo_change'] . '" ' .date('H:m:s');
  114.         TForm::sendData('form_interaction'$obj);
  115.         
  116.         $options = array();
  117.         $options[1] = $param['combo_change'] . ' - one';
  118.         $options[2] = $param['combo_change'] . ' - two';
  119.         $options[3] = $param['combo_change'] . ' - three';
  120.         TCombo::reload('form_interaction''response_b'$options);
  121.     }
  122. }
  123. ?>

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (8)


NR

Teste o seguinte javascript:
  1. <?php
  2. $('[name=response_b]').val(1).trigger('change');
  3. ?>
LF

Nataniel Rabaioli, obrigado pelo feedback.
Devo inserir no onChangeAction?
NR

Isso, após o TCombo::reload. Lembrando que o valor passado para "val", 1 nesse caso, é o valor que você quer selecionar.
LF

Nataniel, perdão a ignorância, fiz conforme, chequei por var_dump, mas sem resultado. Creio que o problema esteja no ID. Tentei com getId(), mas ele retorna o nome do campo de criação, o ajudou. Se puder me ajudar com mais essa aí. Como pegar o Id em tempo de execução no caso do TCombo enableSearch.
LF

  1. <?php
  2. /**
  3.      * Action to be executed when the user changes the Estado combo_change field
  4.      */
  5.     public static function onChangeEstado($param)
  6.     {
  7.         try {
  8.             TTransaction::open('jubaro');
  9.             $options = [];
  10.             if($param['estado_id']){
  11.                 $criteria = new TCriteria;
  12.                 $criteria->add( new TFilter'estado_id''='$param['estado_id'] ));
  13.                 $options Municipio::getIndexedArray('municipio_id','municipio_nome',$criteria);
  14.             }
  15.             TCombo::reload('form_search_Endereco''municipio_id'$optionsTRUE);
  16.             $script "$('#municipio_id').val(".$param['municipio_id'].").trigger(('change');";
  17.             TScript::create($script);
  18.             TTransaction::close();
  19.         } catch (Exception $e) {
  20.             new TMessage('error'$e->getMessage()); // shows the exception error message
  21.         }
  22.     }
  23. ?>
LF

Nataniel Rabaioli, não consegui sanar o problema... fiz conforme tu me indicou mas ainda assim não atualizou com o javascript... tentei identificar o id do campo, mas não consegui sanar também...
NR

Leondas, o problema está em selecionar o campo via javascript pelo id? Tentou selecionar pelo nome como no exemplo que passei?
IV

Comigo está acontecendo isso (eu acho), não entendi muito bem o que acontece com o Leondas, mas comigo quando eu dou um onChange, eu faço uma verificação, se essa verificação muda o valor via senddata de um TDBCombo com enable search ativado, o valor interno é alterado, porém o valor visual não! Ou seja, o valor visivel da span do tdbcombo continua o antigo e o valor interno é alterado... Pode ser que isso tenha sido resolvido na versão nova, mas encontrei uma solução própria, eu apenas mudo o valor do span do tdbcombo com javascript para que mude o texto visível do tdbcombo... Segue abaixo o código caso alguém visite esse tópico algum dia hehe

TScript::create('$(".select2-chosen").text("Selecione um item");'); //o select2-chosen eu peguei inspecionando o elemento da span do tdbcombo