Ajax signálu controlu se nepředá parametr

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

Control Abc:

<?php
class AbcControl extends Control{

	public function render(){
		/* ... */
	}

	public function handleUpdate($id){
		debug::dump($id);
	}
}
?>

Šablona controlu Abc:

{snippet abc}
	{foreach $stack AS $item}
		<a href="{link update, array('id' => $item['id'])}" onclick="return !nette.action(this)">{$item['name']}</a><br />
	{/foreach}
{/snippet}

Presenter Homepage:

<?php
class HomepagePresenter extends Presenter{
	public function actionDefault(){
		$abc = new AbcControl();
		$this->addComponent($abc, 'abc');
		$this->template->abc = $abc;
	}
}
?>

V šabloně presenteru se pak klasicky volá @{? $abc->render()}. Všechno funguje naprosto normálně až na předání parametru metodě handleUpdate($id). Control vygeneruje linky správně a AJAXem se po kliknutí na link pošle požadavek třeba /?abc-id=245784548&do=abc-update. Jenže pokud v metodě udělám dump proměnné $id tak by tam mělo být snad „245784548“, ale z nějakého důvodu je tam neustále NULL. Neví někdo kde by mohl být zakopán pes? Předem děkuji.

PS: Samozdřejmě, že pokud metodu handleUpdate($id) nadefinuji na úrovni presenteru a poté v Controlu sestavuji link jako {plink update!, array('id' => $item['id'])} tak proměnná $id obsahuje „24578454“. Problém nastává pouze při definici v controlu samotném.

Editoval Etch (23. 2. 2009 2:12)

Jod
Člen | 701
+
0
-

Nevidím žiadnu chybu, bude asi niekde inde. Skús {link update, $item[‚id‘]} a pozri či nette zistilo názov parametra a volá ti /?abc-id=245784548&do=abc-update, konkrétne abc-id.

Etch
Člen | 403
+
0
-

Jod napsal(a):

Nevidím žiadnu chybu, bude asi niekde inde. Skús {link update, $item[‚id‘]} a pozri či nette zistilo názov parametra a volá ti /?abc-id=245784548&do=abc-update, konkrétne abc-id.

to sem též zkoušel, ale je tam stejný efekt.

handleUpdate($id) v controlu

{link update, $item['id']}
generuje : /?abc-id=245784548&do=abc-update
dump : NULL

{link update, array('id' => $item['id'])}
generuje : /?abc-id=245784548&do=abc-update
dump : NULL

handleUpdate($id) v presenteru

{plink update!, $item['id']}
generuje : /?id=245784548&do=update
dump : 245784548

{plink update!, array('id' => $item['id'])}
generuje : /?id=245784548&do=update
dump : 245784548

Ono linky nette generuje správně, pouze proste pokud je metoda handle{Signal} v controlu tak není přístupný předávaný parametr.

Etch
Člen | 403
+
0
-

Vyřešeno. Za blbost a zapomnětlivost se platí. :) Problém byl v konstruktoru v tom, že sem zapomněl zavolat parent::__construct()

<?php
class AbcControl extends Control{
	public function __construct($a = NULL){
		parent::__construct();
		/* ... */
	}
        public function render(){
                /* ... */
        }

        public function handleUpdate($id){
                debug::dump($id);
        }
}
?>

Pokud se zapomene zavolat v takovémhle případě parent::__construct() tak parametry budou NULL

Jod
Člen | 701
+
0
-

Vidíš, vidíš :)