Jak na redraw snippetu v renderNeco()
- zt
- Člen | 13
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
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
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)