onChange agindo em outras campos. Tenho 3 combos, com ações caso eles forem selecionado, mas quando seleciono o primeiro combo, ele dispara todas outras ações, de todos os combos, o que pode estar acontecendo.? Anexo um video com o acontecido e abaixo o codigo fonte. ...
FK
onChange agindo em outras campos.  
Tenho 3 combos, com ações caso eles forem selecionado, mas quando seleciono o primeiro combo, ele dispara todas outras ações, de todos os combos, o que pode estar acontecendo.? Anexo um video com o acontecido e abaixo o codigo fonte.
 
  1. <?php
  2. // use wfp\wfpwidgets\WFPNotification;
  3. class CaptacaoFormulario extends TPage
  4. {
  5. private $form;
  6. public function __construct()
  7. {
  8. parent::__construct();
  9. $this->form = new BootstrapFormBuilder('form_captacao');
  10. $this->form->setFormTitle('Captação de Vagas');
  11. $this->form->setFieldSizes('100%');
  12. // *****************************************************
  13. // PRIMEIRA ABA - VAGA
  14. // *****************************************************
  15. $this->form->appendPage('Vaga');
  16. $pk_vaga = new TEntry('pk_concurso');
  17. $pk_vaga->setEditable(FALSE);
  18. $criterio = new TCriteria();
  19. $criterio->add(new TFilter('centro_usuario_fk', '=', TSession::getValue('userid') ));
  20. $vaga_colegiado_fk = new TDBCombo('vaga_colegiado_fk', 'app', 'ViewColegiadoCentroCampus', 'pk_colegiado', '{colegiado_nome} / {centro_nome} / {campus_nome}', null, $criterio);
  21. $vaga_motivo_vacancia = new TText('vaga_motivo_vacancia');
  22. $vaga_docente_substituido = new TEntry('vaga_docente_substituido');
  23. $vaga_quantidade = new TSpinner('vaga_quantidade');
  24. $vaga_quantidade->setRange(1,10, 1);
  25. $vaga_carga_horaria = new TCombo('carga_horaria');
  26. $vaga_carga_horaria->addItems(['T-10'=>'T-10','T-20'=>'T-20','T-40'=>'T-40',]);
  27. $vaga_escolaridade_fk = new TDBCombo('vaga_escolaridade_fk', 'app', 'Escolaridade', 'pk_escolaridade', 'escolaridade_nome');
  28. $criterio = new TCriteria();
  29. $criterio->add(new TFilter('pk_cnpq', 'LIKE', '%00.00.00%' ));
  30. $this->vaga_cnpq_grande_area_fk = new TDBCombo('vaga_cnpq_grande_area_fk', 'app', 'Cnpq', 'pk_cnpq', 'cnpq_nome', null, $criterio);
  31. $change_grande_area = new TAction(array($this, 'onChangeGrandeArea'));
  32. $this->vaga_cnpq_grande_area_fk->setChangeAction($change_grande_area);
  33. $vaga_cnpq_area_fk = new TCombo('vaga_cnpq_area_fk');
  34. $change_area = new TAction(array($this, 'onChangeArea'));
  35. $vaga_cnpq_area_fk->setChangeAction($change_area);
  36. $vaga_cnpq_subarea_fk = new TCombo('vaga_cnpq_subarea_fk');
  37. $change_subarea = new TAction(array($this, 'onChangeSubArea'));
  38. $vaga_cnpq_subarea_fk->setChangeAction($change_subarea);
  39. $vaga_cnpq_especialidade_fk = new TCombo('vaga_cnpq_especialidade_fk');
  40. $row = $this->form->addFields(
  41. [ new TLabel('ID'), $pk_vaga ],
  42. [ new TLabel('Colegiado'), $vaga_colegiado_fk ]
  43. );
  44. $row->layout = ['col-sm-1', 'col-sm-5' ];
  45. $row = $this->form->addFields(
  46. [ new TLabel('Motivo da Vacância'), $vaga_motivo_vacancia ]
  47. );
  48. $row->layout = ['col-sm-6',];
  49. $row = $this->form->addFields(
  50. [ new TLabel('Docente Efetivo Substituido'), $vaga_docente_substituido ]
  51. );
  52. $row->layout = ['col-sm-6',];
  53. $row = $this->form->addFields(
  54. [ new TLabel('Quantidade de Vagas'), $vaga_quantidade ],
  55. [ new TLabel('Carga Horária'), $vaga_carga_horaria ]
  56. );
  57. $row->layout = ['col-sm-3', 'col-sm-3'];
  58. $row = $this->form->addFields(
  59. [ new TLabel('Escolaridade Mínima'), $vaga_escolaridade_fk ]
  60. );
  61. $row->layout = ['col-sm-6',];
  62. $row = $this->form->addFields(
  63. [ new TLabel('Cnpq - Grande área'), $this->vaga_cnpq_grande_area_fk ],
  64. [ new TLabel('Cnpq - Área'), $vaga_cnpq_area_fk ]
  65. );
  66. $row->layout = ['col-sm-3','col-sm-3'];
  67. $row = $this->form->addFields(
  68. [ new TLabel('Cnpq - Subárea'), $vaga_cnpq_subarea_fk ],
  69. [ new TLabel('Cnpq - Especialidade'), $vaga_cnpq_especialidade_fk ]
  70. );
  71. $row->layout = ['col-sm-3','col-sm-3'];
  72. // *****************************************************
  73. // FIM PRIMEIRA ABA - VAGA
  74. // *****************************************************
  75. $this->form->addAction('Salvar', new TAction(array($this, 'onSend')), 'fa:check-circle-o green');
  76. // $this->form->addActionLink('Listagem', new TAction(['ConcursoListagem', 'onReload']), 'fa:table blue');
  77. $vbox = new TVBox;
  78. $vbox->style = 'width: 100%';
  79. $vbox->add( TBreadCrumb::create(['Captação de Vaga','Adicionar'],true));
  80. $vbox->add($this->form);
  81. parent::add($vbox);
  82. }
  83. public function onSend($param)
  84. {
  85. }
  86. public function onClear($param)
  87. {
  88. }
  89. public static function onChangeGrandeArea($param)
  90. {
  91. try {
  92. TTransaction::open('app');
  93. $cnpq = $param['vaga_cnpq_grande_area_fk'];
  94. $criterio = new TCriteria();
  95. $criterio->add(new TFilter('pk_cnpq', 'LIKE', substr($cnpq, 0,1) . '.%' ));
  96. $criterio->add(new TFilter('pk_cnpq', 'LIKE', '%.00.00-%' ));
  97. $criterio->add(new TFilter('pk_cnpq', '!=', $cnpq ));
  98. $repository = new TRepository('Cnpq');
  99. $obj = $repository->load($criterio);
  100. $valores = [];
  101. foreach ($obj as $o) {
  102. $valores[$o->pk_cnpq] = $o->cnpq_nome;
  103. }
  104. TCombo::reload('form_captacao', 'vaga_cnpq_area_fk', $valores, true);
  105. TTransaction::close();
  106. } catch (Exception $e) {
  107. new TMessage('error', $e->getMessage());
  108. }
  109. }
  110. public static function onChangeArea($param)
  111. {
  112. try {
  113. TTransaction::open('app');
  114. $cnpq = isset($param['vaga_cnpq_area_fk']) ? $param['vaga_cnpq_area_fk'] : '';
  115. $criterio = new TCriteria();
  116. $criterio->add(new TFilter('pk_cnpq', 'LIKE', substr($cnpq, 0,5) . '%' ));
  117. $criterio->add(new TFilter('pk_cnpq', 'LIKE', '%00-%' ));
  118. $criterio->add(new TFilter('pk_cnpq', '!=', $cnpq ));
  119. $repository = new TRepository('Cnpq');
  120. $obj = $repository->load($criterio);
  121. $valores = [];
  122. foreach ($obj as $o) {
  123. $valores[$o->pk_cnpq] = $o->cnpq_nome;
  124. }
  125. TCombo::reload('form_captacao', 'vaga_cnpq_subarea_fk', $valores, true);
  126. TTransaction::close();
  127. } catch (Exception $e) {
  128. new TMessage('error', $e->getMessage());
  129. }
  130. }
  131. public static function onChangeSubArea($param)
  132. {
  133. try {
  134. TTransaction::open('app');
  135. $cnpq = isset($param['vaga_cnpq_area_fk']) ? $param['vaga_cnpq_area_fk'] : '';
  136. $criterio = new TCriteria();
  137. $criterio->add(new TFilter('pk_cnpq', 'LIKE', substr($cnpq, 0,8) . '%' ));
  138. $criterio->add(new TFilter('pk_cnpq', '!=', $cnpq ));
  139. $repository = new TRepository('Cnpq');
  140. $obj = $repository->load($criterio);
  141. $valores = [];
  142. foreach ($obj as $o) {
  143. $valores[$o->pk_cnpq] = $o->cnpq_nome;
  144. }
  145. TCombo::reload('form_captacao', 'vaga_cnpq_subarea_fk', $valores, true);
  146. TTransaction::close();
  147. } catch (Exception $e) {
  148. new TMessage('error', $e->getMessage());
  149. }
  150. }
  151. }
  152. </code>

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)


FC

Acho que tem haver com o TCombo::reload das funções comente ela e teste.
FK

Mas o TCombo::reload, não é método utilizado para recarregar o Combo com os dados? Se eu retirar qual método utilizo? Eu utilizei o exemplo de https://www.adianti.com.br/framework_files/tutor/index.php?class=FormInteraction
FC

Então as combos são aninhadas certo? então ao passar em cada função ela vai fazer uma requisição ou seja a cada reload por isso está fazendo 3 requisições . É isso mesmo ? testou?
FK

Não fui claro, no inicio, Após selecionar o primeiro combo, ele dispara a ação do segundo combo, e do terceiro e entra em loop, fica gerando novas requisições sem parar.
FK

Resolvido, adicionei um parametro, false, e parou de dar problema: "TCombo::reload('form_captacao', 'vaga_cnpq_especialidade_fk', $valores, true, false);", é referente ao "fire_events", mas não sei o que isso significa.
FK

Em tempo, obrigado pelo apoio.