adddynamic a přidání prvku chyba v submited

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
zoool
Člen | 89
+
0
-

Ahoj snažím se použít komponentu Replikátor formulářových kontejnerů
ale narazil jsem na jeden problém
formulář jde vytvorit jednoduše mám jej takto

$replicator = $form->addDynamic('obrazky', function (Container $skupina)  use ($presenter) {
        		$skupina->addText('nazev', 'Název souboru:');
        		$skupina->addUpload('soubor', 'Soubor:');
			},1);

když to nechám takto dám do šablony takto

<table n:foreach="$form['obrazky']->components as $obrazek">
            <tr>
            	<td>{$obrazek['nazev']->label}</td>
               	<td>{$obrazek['nazev']->control}</td>
            </tr>
            <tr>
            	<td>{$obrazek['soubor']->label}</td>
               	<td>{$obrazek['soubor']->control}</td>
            </tr>
   			 </table>

ale když pak přidám do presenteru toto

$replicator->addSubmit('add', 'Přidat dalšího člověka')
				->setValidationScope(FALSE)
				->onClick[] = callback($this, 'MyFormAddElementClicked');

tek už se nevykreslí ale vypíše to chybu
Cannot use object of type Nette\Forms\Controls\SubmitButton as array
Děkuji

Filip Procházka
Moderator | 4668
+
0
-

V první řadě, to nejdůležitější jsi vůbec neposlal. Událost, ve které chyba nastává.

A pak, Replicator se krajně nehodí na nahrávání souborů.

zoool
Člen | 89
+
0
-

1. promin chyba nastává zde

112:    <?php $iterations = 0; foreach ($iterator = $_l->its[] = new Nette\Iterators\CachingIterator($form['obrazky']->components) as $obrazek): ?>
113:            <table>
114:                <tr>
115:                    <td><?php echo Nette\Templating\DefaultHelpers::escapeHtml($obrazek['nazev']->label, ENT_NOQUOTES) ?></td>
116:                       <td><?php echo Nette\Templating\DefaultHelpers::escapeHtml($obrazek['nazev']->control, ENT_NOQUOTES) ?></td>
117:                </tr>
118:                <tr>
119:                    <td><?php echo Nette\Templating\DefaultHelpers::escapeHtml($obrazek['soubor']->label, ENT_NOQUOTES) ?></td>

z ladenky na řádku 115

2.Co se hodí na nahrávání souborů když nevím kolik jich bude?

Editoval zoool (16. 1. 2012 19:21)

Filip Procházka
Moderator | 4668
+
0
-

Takto opravíš tu svoji chybu.

<table n:foreach="$form['obrazky']->containers as $obrazek">

Nějakou komponentu, která je určená na nahrávání více souborů najednou? Třeba nějaký multiple file uploader.

zoool
Člen | 89
+
0
-

Supr děkuji ted už to jde vykreslit. Já jsem se díval na ten multi upload, ale právě, že vetšina funguje přes ajax, a to se mi moc nehodí, bo název souboru ukládám a přiřazuji ke zboží, a já zatím nevím id zboží, tak chci uploadovat až po uložení a vygenerovaní patřičného ID produktu

Ještě mám poslední otázku když dám callback při kliknutí na funkci MyFormAddElementClicked a funkce vypadá takto

public function MyFormAddElementClicked(Nette\Forms\Controls\SubmitButton $button)
	{
		$obr = $button->parent;
		$button->parent->createOne();
		if ($obr->isAllFilled()) {
		  $button->parent->createOne();
		}
	}

Tak jak to že se mi formulář klasicky odešla jako pustí se i funkce na odeslání ProduktyFormSubmitted

Editoval zoool (16. 1. 2012 20:17)

Filip Procházka
Moderator | 4668
+
0
-

To je jednoduché, onClick je „navíc“, hlavní událost formuláře je onSuccess.

Lepší je to nekombinovat a používat i na „hlavní“ tlačítko onClick, pak v tom nebudeš mít zmatek :)