Invalidace a překreslení snippetu v jiné komponentě jak té co vyvolala požadavek
- forgie
- Bronze Partner | 18
Ahoj,
zjednodušeně, mám dvě komponenty:
- aControl
- bControl
Bcontrol obslouží AJAXový požadavek:
bControl::hadlePozadavek()
. V presenteru se invalidují snippety.
Ale snippetB
se překřeslí, a snippetA
nikoliv.
Nejsem schopný korektně invalidovat a překreslit snippet vně latte šablony
aControl.
Příklad jak to myslím.
Presenter:
<?php
Presenter::beforeRender()
{
....
$this->redrawControl(wrapperAB)
$this->redrawControl(snippetA);
$this->redrawControl(snippetB);
}
?>
Latte presenteru:
<?php
...
{snippetArea wrapperAB}
{form someForm}
{control A, $form}
{/form}
{snippet B}
{control B}
{/snippet}
{/snippetArea}
...
?>
Latte od aControl:
<?php
....
{foreach $form[$name]->items as $key => $label}
...
{input $form[$name]:key}
...
{/foreach}
{snippet A}
{dump $value}
{$value}
{/snippet}
?>
Ale ať dělám co dělám, $value
uvnitř
{snippet A}
se nikdy nepřekreslí. {snippet B}
se
překreslí bez problému. Přitom {dump $value}
vypíše v tracy
správnou aktualizovanou hodnotu, ta se ale nevypíše do HTML.
I když invaliduji {snippet A}
uvnitř aControl
a
né v presenteru, výsledek je naprosto stejný.
Problém je, že nechci invalidovat celý ten formulář. Proto je
snippetA
uvnitř componenty a překřesluje pouze jednu číselnou
hodnotu.
Nicméně, pokud {snippet A}
přenesu do latte presenteru tak to
překreslí vše korektně, ale uvnitř latte aControl
ani
za nic.
Nevíte proč se {$value}
v Latte aControl
nepřekreslí ale pokud je v lattte presentaru tak to funguje bez prblému? Je
to ‚očekávané chování‘ snippetů?
Editoval forgie (9. 12. 2017 15:11)
- David Matějka
- Moderator | 6445
I když invaliduji {snippet A} uvnitř aControl a né v presenteru, výsledek je naprosto stejný.
jj, musis to invalidovat v te komponente, tedy treba z presenteru
$this['komponentaA']->redrawControl('a');
pokud to nebude fungovat, tak je to divny a zkus to debugovat – jestli se zavola ten snippet v sablone, jestli (resp. co) se vrati v te ajax response
mimochodem, pokud si jeste nevidel, tak doporucuji moji prednasku o snippetech
- forgie
- Bronze Partner | 18
Jj, přednášku jsem viděl, díky.
Jsem to pak vzdal a prostě jsem celý ten {snippet a} přenesl o úroveň
výš do latte presenteru – včetně výpisu té proměnné.
Jinak, invalidaci v komponente jsem zkoušel, ale nešlo to. Snippet se
zavolá, {dump $variable}
proměnnou vypíše v tracy, HTML se
však nepřekřeslí. Ale ajax response som uz nedebugoval :(
BTW, jak se debuguje ajax response? Pardon za začátečnický dotaz, ale nevím ani kde začít, pokud bych chtěl ajax response debugovat.
Editoval forgie (9. 12. 2017 18:24)
- David Matějka
- Moderator | 6445
otevres v prohlizeci developer tools (F12) a v zalozce „Network“ vidis jednotlive pozadavky