Jak na redraw snippetu v renderNeco()

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

Ahoj,

mám takový problém. Snippety, respektive jejich redrawControl('snippet') mi nefunguje v jiném renderu než defaultním tedy renderPanel() / {control neco:panel}. Je to normální chování? Mohu nějak docílit toho aby to fungovalo? Nechce se mi vytvářet novou kontrolu pro vyrendrování panelu, když mám veškerou logiku kterou potřebuji právě tady v již vytvořené controle.

David Matějka
Moderator | 6445
+
+2
-

Ano, je to known limitation. Jednim zpusobem, jak to obejit, je pouzit makro snippetArea, kterym obalis vykreslovani komponenty

{snippetArea foo}
	{control neco:panel}
{/snippetArea}

A pak invalidujes jak snippet v komponente, tak snippetArea v presenteru. SnippetArea udela to, ze provede tu cast kodu (a tedy zavola spravny render), ale neodesle se cela do prohlizece – tam se odesle pouze snippet invalidovany v komponente. Ale i tento zpusob ma sve omezeni, pokud bys treba tu komponentu vykreslovat 2×, jednou normalne a jednou s jinou render metodou, tak to nebude spravne pracovat.

Ja osobne doproucuju nepouzivat jine render metody u komponent, ani posilani parametru komponentam (je tam stejny problem) a vzdy preferuju nakonfigurovani te komponenty v presenteru, v tvem pripade tedy treba

protected function createComponentFoo()
{
	$control = $this->fooFactory->create();
	$control->setView('panel'); //budes muset implementovat

	return $control;
}

Pokud bys pak potreboval jednu komponentu vykreslit jednou vykreslit normalne a jednou „jinak“, tak si vytvor dve tovarny v presenteru, kazdou nakonfigurovanou jinak.

zt
Člen | 13
+
0
-

aha, rozumím, díky za upřesnění, zřejmě se přikloním k tomu setView(), což mě vypadá jako celkem rozumné řešení

zt
Člen | 13
+
0
-

když nad tím tak přemýšlím, je to best practice? jako programátor pak bohužel musíš vědět u control které dělal někdo jiný jaké mají view

EDIT:

taky pokud mám danou komponentu na stránce vícekrát tak nastává ten problém že ji musím vícekrát vytvořit pro jednotlivá view

Editoval zt (3. 9. 2015 11:45)