BUG no THidden e em uma Função JAVASCRIPT (ttable) O THidden ao usar como campo vetorial, e chamar a função do TForm->getData() Exemplo:... não recupera os valores pelo getData() devido a que o mesmo não tem o tratamento feito para tal função, comparado ao TEntry e outros, vejamos.... ...
WP
BUG no THidden e em uma Função JAVASCRIPT (ttable)  
O THidden ao usar como campo vetorial, e chamar a função do TForm->getData() Exemplo:...
 
  1. <?php
  2. $oculto_vetorial = new THiden('oculto_vetorial[]');
  3. ..........................
  4. $dados = $this->form->getData();
  5. ?>


não recupera os valores pelo getData() devido a que o mesmo não tem o tratamento feito para tal função, comparado ao TEntry e outros, vejamos....

 
  1. <?php
  2. //o tratamento que recebe o TEntry na hora de recuperar os valores desde o FORM
  3. /**
  4. * Return the post data
  5. */
  6. public function getPostData()
  7. {
  8. $name = str_replace(['[',']'], ['',''], $this->name); //<<<< Aqui esta o tratamento que recebe o TEntry e outros componentes (removendo os colchetes para que seja idéntico seu nome ao nome que vem no array do _POST) ja o THidden não tem isto
  9. .....................................................
  10. }
  11. ?>


Função JAVASCRIPT do componente TTABLE > ttable.js

especificamente a função chamada >>> ttable_reset_fields

Vejamos o problema.

function ttable_reset_fields(row, clear_fields) { var fields = $(row).find('input,select'); var uniqid = parseInt(Math.random() * 100000000); //esta linha gera um ID único (similar a função existente nos componentes PHP) para cada elemento, ou era o que deveria ser, mas...... $.each(fields, function(index, field) // a cada volta aqui é atribuido o novo ID para cada INPUT/SELECT da linha da TABLE que foi duplicada/clonada, porem o ID é o mesmo para todos porque ele é gerado apenas ao inicio, antes do EACH { // o correto para que cada INPUT/SELECT tenha seu proprio ID seria que a linha citada acima esteja aqui dentro do EACH Exemplo: var uniqid = parseInt(Math.random() * 100000000); //gerar um ID diferente para cada INPUT/SELECT existente na ROW clonada var field_id = $(field).attr('id'); var field_component = $(field).attr('widget'); .........

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 (2)


NR

A função onSave dos formulários vetoriais deve ser static, pois os campos criados dinamicamente não são registrados no formulário. Desse modo não podemos utilizar a função $this->form->getData(). Deve-se utilizar a variável parâmetro da função:
 
  1. <?php
  2. static function onSave($param)
  3. ?>


Quanto ao javascript, acho que a ideia é essa mesmo, o id é gerado uma única vez por linha. Observe que o id não se repete, pois ele é concatenado ao id original de cada componente:
var new_id = field_prefix + '_' + uniqid;
WP

ola Nataniel.


Quanto ao javascript, acho que a ideia é essa mesmo, o id é gerado uma única vez por linha. Observe que o id não se repete, pois ele é concatenado ao id original de cada componente: *
var new_id = field_prefix + '_' + uniqid;


errado
o prefix, é o tipo de widget (tentry, etc) , analise o código mais acima de onde tu extraiu esse trecho de código

dai si tiver 2 TEntry na mesma linha fica por exemplo > tentry_99999, tentry_99999


sobre o outro
A função onSave dos formulários vetoriais deve ser static, pois os campos criados dinamicamente não são registrados no formulário. Desse modo não podemos utilizar a função $this->form->getData(). Deve-se utilizar a variável parâmetro da função:

eu não estou usando formulario vetorial estou usando outra forma , e o único entry que tem problema é o THidden por não ter aquele tratamento que mencionei. (de todos modos fiz minha correção aqui) só quero deixar registrado para próximas versões para ser incluido a correção