Problema em clonar a última linha de uma tebela Fala galera, estou tendo problema ao usa a função js : [ ttable_clone_previous_row(this) ] para copiar a última linha de uma tabela, fiz um botão usando a classe TButton e adicionei essa função no botão, porém ao clicar sobre o botão o mesmo é clonado (Deveria ser a linha antes dele!)....
LL
Problema em clonar a última linha de uma tebela  
Fala galera, estou tendo problema ao usa a função js : [ ttable_clone_previous_row(this) ] para copiar a última linha de uma tabela, fiz um botão usando a classe TButton e adicionei essa função no botão, porém ao clicar sobre o botão o mesmo é clonado (Deveria ser a linha antes dele!).

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


LL

 
  1. <?php
  2. class FormMultiValuesView2 extends TPage{
  3. private $form;
  4. public function __construct(){
  5. parent::__construct();
  6. $this->form = new TForm;
  7. $table = new TTable;
  8. //$table->addSection('thead'); // caso tenh uma sessão o botão add não faz nada
  9. $table->addRowSet(new TLabel('campo teste'));
  10. for( $n = 1; $n <= 3; $n++ ){
  11. $combo = new TCombo('combo[]');
  12. $combo->addItems( ['pc' => 'Peca', 'kg' => 'Kilo', 'lt' => 'Litro', 'cm' => 'Centimetro'] );
  13. $del = new TImage('fa:trash-o red');
  14. $del->onclick = 'ttable_remove_row(this)'; //função java scricp // vem distribuida junto com o framework
  15. $table->addRowSet($combo, $del);
  16. }
  17. $add = new TButton('clone');
  18. $add->setLabel('Adiciona');
  19. $add->setImage('fa:plus-circle green');
  20. $add->addFunction('ttable_clone_previous_row(this)'); // Está clonando o próprio botão
  21. $table->addRowSet($add);
  22. $this->form->add($table);
  23. parent::add($this->form);
  24. }
  25. }
  26. ?>

NR

Você chegou a ver o container TFieldList, ele faz exatamente a mesma coisa que você está tentando fazer:
adianti.com.br/framework_files/tutor/index.php?class=FormFieldListVi

Voltando ao problema, a função ttable_clone_previous_row espera que o botão esteja dentro da seção "tfoot". Faça o seguinte:
 
  1. <?php
  2. // criar tbody
  3. $table->addSection('tbody');
  4. // adicionar componentes, foreach...
  5. // criar tfoot
  6. $table->addSection('tfoot');
  7. // adicionar botao na tabela
  8. $table->addRowSet($add);
  9. ?>
LL

Nataniel Rabaioli, muito obrigado, funcionou. Bom só não entendi uma coisa, em um dos vídeos o autor faz uma implementação parecida com a que eu fiz e NÃO usa $table->addSection('tfoot'), no dele funcionou, no meu não.
LL

Outra coisa, quando eu apago todos os registros (Clicando sobre a lixeira) e depois tento adicionar um novo (Clicando sobre o botão adicionar) isso não é mais possível, pq o botão adicionar apenas duplica a última linha, e como nenhum registro existe mais, não é possível adicionar.
NR

A função ttable_remove_row também considera a seção tbody pra fazer um controle e evitar que a primeira linha seja excluída:
 
  1. <?php
  2. function ttable_remove_row(element)
  3. {
  4. var table = $(element).closest('table');
  5. var rows = table.find('tbody').find('tr:visible').length;
  6. tr = $(element).closest('tr');
  7. if (rows == 1) // last row
  8. {
  9. var insert = tr.clone();
  10. tfieldlist_reset_fields(insert, true);
  11. tr.after($(insert));
  12. tr.remove();
  13. }
  14. else
  15. {
  16. tr.remove();
  17. }
  18. ttable_reset_counter(table);
  19. }
  20. ?>