Formulář se selectem + ajax

kolsi
Člen | 131
+
0
-

Ahoj, mohl by mi někdo prosím vysvětlit toto chování:

Mám ajaxový formulář, ve kterém je select, např.:

	$form = new \Nette\Application\UI\Form($this, $name);
	$form->addSelect('test', 'Test', [ 10, 20 ]);
	// ...
	$form->addSubmit('submit');
	$form->onSuccess[] = function() {
		$this->redrawControl('test');
	};

A šablonu, kde renderuji formulář, ale daný select chci vykreslit jenom za určitých podmínek (které v době tvoření formuláře ještě nemusí být známé), např:

{snippet test}
	{form form class => 'ajax'}
		<span n:if="$nejakaPodminka">{input test}</span>
		{input submit}
	{/form}
{/snippet}

U jiných kontrolek není problém, ale u selectu pokud dojde ke splnění $nejakaPodminka a select se tedy nevykreslí, tak přestane fungovat ajax. Požadavek se v pořádku odešle, ale odpovědí není JSON se snippetem, ale HTML kód celé stránky. Žádnou chybu to nevyhodí. A já nedokážu pochopit proč.

MajklNajt
Člen | 470
+
0
-

ahoj, a odkiaľ sa berie tá $nejakaPodminka? najvhodnejšie by bolo logiku podmienky mať v presetneri/komponente, kde tvoríš ten formulár:

$form = new \Nette\Application\UI\Form($this, $name);
if($nejakaPodminka) {
	$form->addSelect('test', 'Test', [ 10, 20 ]);
}
// ...
$form->addSubmit('submit');
$form->onSuccess[] = function() {
    $this->redrawControl('test');
};

a v template potom takto:

{ifset $form["test"]}{input test}{/ifset}
kolsi
Člen | 131
+
0
-

Ta podmínka je právě nastavovaná uživatelem zvnějšku (resp. při jejím nastavení nedává použití selectu smysl), takže ji může nastavit v době, kdy už je formulář vytvořen. Přijde mi ale zvláštní, že se to takto chová pouze v případě selectu, jiné kontrolky jsou bez problému.

MajklNajt
Člen | 470
+
0
-

Pri selecte sa kontroluje, či je vybraná hodnota z množiny definovaných, preto sa ten formulár javí ako neodoslaný.

kolsi
Člen | 131
+
0
-

To je přesně ono! Dal jsem překreslení snippetu do $form->onError a už to šlape :)