Ako resetnut formular tak aby jeho prvkom ostali default values?
- duskohu
- Člen | 778
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
kdyz se kouknes, jak
je to implementovany tak zjistis, ze ne..
melo by ale stacit redirectnout na this
a budou tam defaultni
hodnoty
- Jan Suchánek
- Člen | 404
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)
- duskohu
- Člen | 778
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
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
@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)