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:...
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....
Função JAVASCRIPT do componente TTABLE > ttable.js
especificamente a função chamada >>> ttable_reset_fields
Vejamos o problema.
- <?php
- $oculto_vetorial = new THiden('oculto_vetorial[]');
- ..........................
- $dados = $this->form->getData();
- ?>
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....
- <?php
- //o tratamento que recebe o TEntry na hora de recuperar os valores desde o FORM
- /**
- * Return the post data
- */
- public function getPostData()
- {
- $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
- .....................................................
- }
- ?>
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');
.........
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:
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:
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