addDynamic neposílá vyplněná data ke zpracování

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

Ahoj,
mám takovej zajímavej problém. Nevím jestli jsem něco neřehlédl, ale peru se s tím už pěknou chvilku. Mám replicator (addDynamic) v komponentě a všechno funguje uplně normálně až na to, že addDynamic neposílá změněná data do metody ke zpracování. Pole mimo addDynamic se pošlou normálně. AddDynamic pošle null popřípadě jestli jsou data v tabulce tak data z tabulky. Pokud ale změním input, tak nepošle změnu, ale data z vykreslení.

public function createComponentForm()
{
	$form = new Form();

	$self = $this;
	$invalidateCallback = function () use ($self) {
		$self->invalidateControl('timeslot');
	};

	$replicator = $form->addDynamic('timeslots', function (Container $timeslot) use ($invalidateCallback)
	{
		$timeslot->addHidden('id');
		$timeslot->addSelect('day', 'Výběr dne v týdnu', array(
			'nic', 'Pondělí', 'úterý', 'středa', 'Čtvrtek', 'Pátek', 'Sobota', 'Neděle'
		));

		$timeslot->addText('timeFrom', 'Čas od:', 5, 5)
			->setAttribute('class', 'input-small timepicker');

		$timeslot->addText('timeTo', 'Čas do:', 5, 5)
			->setAttribute('class', 'input-small timepicker');

		$timeslot->addText('note', 'Poznámka:', 100, 300)
			->setAttribute('class', 'input-xxlarge');

		// Odstraní konkrétní dynamický "formulář"
		$timeslot->addSubmit('remove', 'Smazat')
			->setAttribute('class', 'ajax')
			->addRemoveOnClick($invalidateCallback);
	}, 0);

	$replicator->addSubmit('add', '+')
		->setAttribute('class', 'ajax')
		->addCreateOnClick($invalidateCallback);

	$form->addSubmit('send', 'Uložit');

	$form->onSuccess[] = callback($this, "process");

	return $form;
}
public function process(Form $form)
{
	if ($form->submitted->name == 'send')
	{
		foreach ($form['timeslots']->values as $timeslot)
		{
			dump($timeslot);
			$timeslotArray = array (
				'day' => $timeslot->day,
				'time_from' => $timeslot->timeFrom,
				'time_to' => $timeslot->timeTo,
				'note' => $timeslot->note
			);
			dump($timeslotArray);
			$lastInsert = $this->timeslotModel->editOrAdd($timeslot->id, $timeslotArray);
		}
		exit();
		$presenter->redirect(":admin:Clubs:");
	}
}

Šablona

{snippet timeslot}
{form form class =>"well form-vertical"}

{foreach $form['timeslots']->containers as $id => $timeslot}
	{input timeslots-$id-id}

	{label timeslots-$id-day /}
	{input timeslots-$id-day}

	{label timeslots-$id-timeFrom /}
	{input timeslots-$id-timeFrom}

	{label timeslots-$id-timeTo /}
	{input timeslots-$id-timeTo}

	{label timeslots-$id-note /}
	{input timeslots-$id-note}

	{input timeslots-$id-remove}
{/foreach}

<br />
{input $form['timeslots']['add']}
{input send}

{/form}
{/snippet}

Nějáký nápad, co jsem udělal blbě? Uplně stejně (akorát v presenteru) to používám v jiném projektu a tam to jde bez problému. Je problém v tom, že to je v komponentě?

Díky.

Oli
Člen | 1215
+
0
-

Blbá chyba, v metodě, kde plním data, jsem měl $this['form']['timeslots'][$timeslot->id]->setValues( ... místo setDefaults( ...