Chyba/Vlastnost při generování URL s persistentním parametrem po překreslení snippetu

2bfree
Člen | 252
+
0
-

Narazil jsem na zvláštní chování v Nette a popravdě nevím, jestli je to vlastnost (pak bych to doplnil do dokumentace), nebo chyba?

Když mám v Presenteru persistentní parametr a několik komponent, které vykreslují odkaz na vlastní událost, pak se tento parametr správně přidává do URL.

Jakmile však jedna komponenta ve svém životním cyklu změní hodnotu tohoto parametru a následně překreslí snippety všech komponent, tak se sice nová hodnota parametru dostane všude a vykreslí správně, ale link generátor v těchto komponentách pracuje stále s původní hodnotou.

Řešením / workaroundem pak je nastavit nejen hodnotu persistentního parametru, ale zároveň i přepsat hodnotu parametru v property params na Presenteru viz: příklad

MajklNajt
Člen | 517
+
0
-

myslím si, že komponenta by nemala meniť stav svojej nadradenej komponenty (presentera), čiže podľa mňa to je očakávané a správne fungovanie

2bfree
Člen | 252
+
0
-

majk@MajklNajt Příklad ukazuje, že komponenta vysílá událost, na kterou je navěšen v presenteru handler, který v sobě změní svůj stav…

Tedy nejde o porušení pravidel…

Marek Znojil
Člen | 92
+
0
-

Ahoj,
řekl bych, že je to očekáváné/správné chování. Také si myslím, že tvoje aktualizace stavu jenom persistentního parametru je správná.

Také se nabízí možnost rovnou znovu aktualizovat stav celého prezenteru:

$params = [];
$this->saveState($params);
$this->loadState($params);

A linkGenerátor dostane správné parametry z aktuálního stavu.

2bfree
Člen | 252
+
0
-

Připadá mi, že je to při nejmenším neintuitivní, dříve se to chovalo jinak (nebylo to potřeba) a je-li to “správně”, pak bych o tom čekal záznam v dokumentaci…

Případně, pokud by toto byla standardní cesta, pak bych čekal v Presenteru nějaký helper aka reloadState, který by toto přesně udělal…

Editoval 2bfree (Včera 5:59)

Marek Znojil
Člen | 92
+
+2
-

Data parametrů se ti načtou z URL, jejich stav se pak uloží (jen jednou) a to při vytváření komponenty.

V příkladu odkaz na událost přenáší pořád stejnou hodnotu parametru, proto mi přijde logické, že pokud chceš již za běhu změnit stav parametru, musíš ho po změně hodnoty i znovu aktualizovat.

reloadState nezní špatně 👍.