Invalidace a překreslení snippetu v jiné komponentě jak té co vyvolala požadavek

forgie
Bronze Partner | 18
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

otevres v prohlizeci developer tools (F12) a v zalozce „Network“ vidis jednotlive pozadavky

forgie
Bronze Partner | 18
+
0
-

Aha, jasně, já jsem myslel že na to má Nette něco specialní :)

díky moc