volání callbacku s parametrem

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

Cau chci se zeptat
kdyz volam callback a potrebuju aby se predal i matametr $i

->onClick[] = callback($this, 'aktualizovat', $i);

Jak to mam upravit aby callback zavolal metodu:

public function aktualizovat($form, $cislo)
	{
		dump($cislo);
	}

Kde $cislo bude ten predanej parametr $i
?
Dík

Editoval Petr9 (14. 8. 2012 14:03)

Ot@s
Backer | 476
+
0
-

Takto to nefunguje. Přesuň si $i do hidden pole formuláře nebo do URL (via persistentní parametr).

Petr9
Člen | 32
+
0
-

Ne?
no kdyz ja mam formulář a v tom 3 prvky submit apotrebuju v callbacku ktery se zavola rozlisit jakym tlacitkem to bylo odeslano.
To mam udelat teda jak?

duke
Člen | 650
+
0
-

Každému tlačítku přiřaď vlastní onClick handler.

Petr9
Člen | 32
+
0
-

jako ze kazdymu priradim jinej callback?

ono to ale etě mám delany ta ze ty formuláre se delaji v cyklu a nekdy muzou byt 2 a pak nekdy 3, 4

22
Člen | 1478
+
0
-
public function processForm(SubmitButton $button)
{
	dump($button->name); exit
}

?

Editoval 22 (14. 8. 2012 14:48)

Petr9
Člen | 32
+
0
-

Jo to by mohlo byt ono
ten nazev funkce to je neco spesl nebo to je nazev callbacku
tohoto:
$form->onSuccess[] = callback($this, ‚aktSubmited‘);

?

22
Člen | 1478
+
0
-

onClick[] callback $this->processForm;

$form['submitButton']->onClick[] = $this->processForm;

Editoval 22 (14. 8. 2012 15:01)

Petr9
Člen | 32
+
0
-

Tak sem to upravil takto:

$form->addSubmit('aktualizovat'.$i, 'Aktualizovat')->onClick[] = callback($this, 'aktualizovatXMLSubmited');

a pak mam funkci
public function aktualizovatXMLSubmited(SubmitButton $button)
{
dump($button->name);

A píše to chybu:
Argument 1 passed to AktualizaceZboziPresenter::aktualizovatXMLSubmited() must be an instance of SubmitButton, instance of Nette\Forms\Controls\SubmitButton given
Co mám špatně?

22
Člen | 1478
+
0
-

Máš to tam napsané :)

musíš ještě jaksi zohlednit namespace use Nette\Forms\Controls\SubmitButton;

Petr9
Člen | 32
+
0
-

Jo ano to je ono díky moc.

duke
Člen | 650
+
0
-

Navíc jsi spojil obě dvě možná řešení dohromady… :-)

Ten parametr button potřebuješ pouze v případě, že používáš společný handler typu processForm (abys poznal, na který submit button bylo kliknuto). Pokud použiješ oddělené handlery (tvé aktualizovatXMLSubmited např. callback($this, 'aktualizovat' . $i . 'Submitted')), pak už ten button nepotřebuješ, protože víš, o který se jedná, už předem.

Mimochodem míchat češtinu a angličtinu v názvech proměnných se nedoporučuje a submitted se píše s dvěma t.

Editoval duke (14. 8. 2012 16:16)

22
Člen | 1478
+
0
-

no ještě je tuším další možnost a to:

	dump($form['button']->isSubmittedBy());

Editoval 22 (14. 8. 2012 15:52)