Ako resetnut formular tak aby jeho prvkom ostali default values?

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

Caute mam formular a implementoval som si akciu reset, chcel by som resetnut prvky formulara , ale tak aby sa znovu nastavyli default values. Da sa to nejak?

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

	// prvky si pridam v presentru

	$form->addSubmit('filter', 'Filter')
		->setValidationScope(FALSE)
		->onClick[] = callback($this, 'processSubmit');

	$form->addSubmit('reset', 'Reset')
		->setValidationScope(FALSE)
		->onClick[] = callback($this, 'processReset');

	return $form;
}

public function processReset(SubmitButton $button)
{
	// toto mi vymaze data uplne, aj default
	$button->getForm()->setValues(array(), TRUE);
}
David Matějka
Moderator | 6445
+
0
-

kdyz se kouknes, jak je to implementovany tak zjistis, ze ne..
melo by ale stacit redirectnout na this a budou tam defaultni hodnoty

duskohu
Člen | 778
+
0
-

Hmm, to je sice pekne, ale ked odoslem formular ajaxovo tak to nepojde.

Jan Suchánek
Člen | 404
+
0
-

Tohle je asi ošlivě, že?

protected function createComponentForm()
{
    $form = new Form();
    // prvky si pridam v presentru

    $this->setDefaults($form); // nastavím jim výchozí hodnoty

    $form->addSubmit('filter', 'Filter')
        ->setValidationScope(FALSE)
        ->onClick[] = callback($this, 'processSubmit');

    $form->addSubmit('reset', 'Reset')
        ->setValidationScope(FALSE)
        ->onClick[] = callback($this, 'processReset');

    return $form;
}

public function setDefaults($form){
	// nastavení výchozích parametrů
}

public function processReset(SubmitButton $button)
{
    $this->setDefaults($button->getForm()); // vyresetuji výchozí?
}

Editoval jenicek (18. 12. 2013 17:26)

voda
Člen | 561
+
0
-

A form.reset() nebo <input type='reset'> nefungují?

duskohu
Člen | 778
+
0
-

voda napsal(a):

A form.reset() nebo <input type='reset'> nefungují?

Ono to je sice pekne, ale po odoslani formulara a pripadnom invalidovani formular uz nevie co bolo nastavene default.

@jenicek toto riesenie sa mi velmi nepaci, ale asi to bude jedine funkcne :-) a navyse, nerad by som do toho pchal js

jiri.pudil
Nette Blogger | 1032
+
0
-

Teoreticky bys mohl udělat forward na signál, ve kterém bys formulář invalidoval. Ale nemám teď moc čas to vyzkoušet, takže ruku do ohně za to nedám.

public function processReset(SubmitButton $button)
{
	if ($this->isAjax())
		$this->forward('resetForm!');
}

public function handleResetForm()
{
	$this->invalidateControl('form');
}

Editoval jiri.pudil (18. 12. 2013 23:15)

Jan Suchánek
Člen | 404
+
0
-

@duskohu: Parametry by měli být persistentní a resetovat redirectem na výchozí hodnoty, ne?

/** @persistent */
public $search;

/** @persistent */
public $type;

public function processReset(SubmitButton $button)
{
	$this->search = false;
	$this->type = false;

 	if(!$this->isAjax(){
		$this->redirect("default");
	}

	$this->invalidateControl("…");
	$this->invalidateControl("…");
}

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

    $form->addText('search', 'Hledání:');
    $form->addSelect('type', 'Stav:', array(….))->setPrompt('Vyberte stav');

    $form->setDefaults(array(
    	'search' => $this->search,
    	'type' => $this->type,
    ));

    $form->addSubmit('filter', 'Filter')
        ->setValidationScope(FALSE)
        ->onClick[] = callback($this, 'processSubmit');

    $form->addSubmit('reset', 'Reset')
        ->setValidationScope(FALSE)
        ->onClick[] = callback($this, 'processReset');

    return $form;
}

Je to spravně nebo pišu blbosti? Tzn. nejlepší bylo mít metodu na getDefaults() a to by mohl mít přímo formulář ne?

Editoval jenicek (19. 12. 2013 0:07)