Komponenta v komponente jen pri signalu – vytvoreni odkazu

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

Mam komponentu B v komponente A. Komponenta B se vykresluje jen pri zavolani signalu na A. Potrebuji v komponente B vytvorit odkaz this s novym/zmenenym parametrem. Coz mi sice spravne vygeneruje nazev parametru, ale v url chybi patricne do pro A, ve kterem se komponenta B zobrazuje.

Nejake napady???

uestla
Backer | 796
+
0
-

Odchytávat změnu způsobenou komponentou B v komponentě A a případně ručně zavolat signál pro vykreslení B a tím i zpracování signálu v B?

EDIT:

To jsem ale blbeček – komponenta B mění jen sebe a ne komponentu A, že? To je těmi hardcore UFOs… Zkusím ještě pár chvil přemýšlet…

EDIT 2:

Zní mi to celé nějak podivně – proč jen nevyužiješ lazy loading přes createComponent... na místo vytváření komponenty ručně po zavolání signálu?

Editoval uestla (23. 7. 2011 3:38)

hrach
Člen | 1836
+
0
-

uestla: komponenta B je vytvářena přes lazyloading, jen je v šabloně vykreslan v podmínce, která nastává při signálu.

Tak mě tak napadá, jestli tohle náhodou v nejnovějším nette nefunguje. Tento problém totiž řeším ve starém nette, respektive v nette ještě se starými snippety. Tzn. aby snippet komponenty A byl vyrenderován, musí být nevalidní. Jenže komponenta B se ani nedostane ke slovu, takže nelze to řešit ani znevalidněním v komponentě B.

Ohledně nového nette – jdu to zkusi.

Filip Procházka
Moderator | 4668
+
0
-
class B extends Control
{
	function foo()
	{
		$this->getParent()->link('this', array('param' => 10));
	}
}

Zkus to více rozepsat, pokud ti to stále nefunguje :)

hrach
Člen | 1836
+
0
-

hosipLan: az na to, ze this tam byt nemuze, pac to nezachovava signal, tak to mam stejne :)

<a href="{$control->parent->link('signal', array('bcontrol-param' => 20))}">...
Jan Tvrdík
Nette guru | 2595
+
0
-
$this->link('this', array(
	'param' => 'foo',
	'do' => $this->presenter->getParam('do'), // místo do lze požit konstantu z presenteru
));
kravčo
Člen | 721
+
0
-

Myslím, že používaš signál na niečo, na čo sa nehodí alebo na čo nebol zamýšľaný.

Ale keď už, prečo nezavoláš rovno signál?

$b->parent->link('signal!', $b->parent->param + array('param' => 'new/change'));
Filip Procházka
Moderator | 4668
+
0
-

V komponentách nemusíš psát ! u signálu, všechno je automaticky signál. Řešení od Honzy i Hracha je tudíž identické, až na to this (to se u komponent přeloží na aktuální signál? já bych řekl že ne).