Zavolání signálu pomocí tlačítka formuláře

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

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
+
0
-

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)

stemba
Člen | 20
+
0
-

Myslím, že je to výborný nápad! Díky :-)

stemba
Člen | 20
+
0
-

Jen mi to stále hlásí tuhle hlášku:
Cannot read an undeclared property Nette\Forms\Controls\Button::$onClick

Co s tím?

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

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)

stemba
Člen | 20
+
0
-

Chápu, asi je to tak. Ale příjde mi že onClick nefunguje při odesílání formuláře přes Ajax, jakmile vypnu v prohlížeči javascript, tak to potom funguje.. mám ten formulář totiž odesílaný právě přes Ajax..

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Ou… komplikace komplikace :) Jaký používáš obslužný skript?