Zavolání signálu pomocí tlačítka formuláře
- stemba
- Člen | 20
Ahoj,
Mám formulář, který má několik polí, funkci, která zpracovává data po
odeslání atd. Do formuláře jsem vložil další tlačítko pomocí addButton
a potřebaval bych aby se při jeho stiknutí zavolal signál, který provede
určité změny v presenteru. Vím že by to šlo udělat nějak přes
javascript Onclick() a pak přes window.location… Šlo by to udělat nějak
bez toho javascriptu?? button totož žádné href nemá..
Díky
- Vojtěch Dobeš
- Gold Partner | 1316
Co takhle vyčlenit samotnou funkcionalitu do jedné privátní metody
presenteru, a následně jak z onoho signálu, tak z callbacku
onClick[]
navěšeného na to tlačítko volat tuto metodu?
Velmi zkratkovitý kód pro ukázku:
private function doStaff() { ... }
public function handleSignal() {
$this->doStaff();
}
protected function createComponentForm()
{
$form = new Form;
$form->addSubmit('special')
->onClick[] = callback($this, 'processButton');
return $form;
}
public function processButton($button)
{
$this->doStaff();
}
Editoval vojtech.dobes (6. 5. 2012 20:01)
- Vojtěch Dobeš
- Gold Partner | 1316
Pokud se nemýlím, tak za takovýmto účelem je třeba použít
addSubmit()
(tedy odesílací tlačítko), podle dokumentace je
addButton()
určen především k vyvolávání javascriptových
reakcí. addSubmit()
tlačítko už tu událost
onClick
má.
Pozor, v takovémto formuláři by pak neměla být obsluha
onSuccess
, protože po proběhnutí onClick
se provede
i onSuccess
automaticky (pokud je odeslaný formulář validní).
Nebo si alespoň pohlídat, že onClick
třeba přesměruje, ale
už nedojde na onSuccess
(které se volá až po zpracování
všech onClick
callbacků).
Opravil jsem původní příspěvek.
Editoval vojtech.dobes (6. 5. 2012 20:00)