Obecná invalidace snippetu, který je v komponentě, prováděná z presenteru

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

Zdravím,

řeším následující problém:

Na stránce s editací entity mám komponentu FilesList pro zobrazení souborů, která zobrazuje nějaké ty náhledy a odkaz na smazání souboru, který vede na handle presenteru. Všechno funguje, pokud to nechci ajaxově. Problém nastává ve chvíli, kdy chci překreslit snippet se soubory – soubor se smaže, ale snippet se nepřekreslí.

Otázka: je možné nějak jednoduše zavolat z presenteru invalidaci snippetu, který se nachází v komponentě?

Ideálně nezávisle na tom, jestli se ta komponenta nachází v presenteru, nebo v další komponentě (která může být v další komponentě… atd.). Jediné, co mě napadá, je předávat té handle pro smazání souboru nějak i adresu snippetu, který má překreslit, ale problém je, že netuším, jak v komponentě tu adresu získat.

Editoval chikeet (18. 2. 2015 22:15)

David Matějka
Moderator | 6445
+
0
-

Bude lepsi, kdyz signal handler bude primo v komponente a ne v presenteru.

chikeet
Člen | 160
+
0
-

No, když to nepůjde vyřešit líp… Pak ale pravděpodobně budu mít stejný kód minimálně na dvou místech, protože soubory se mažou ve více presenterech (jde o různé soubory, které patří k různým entitám, ale mazání je univerzální) a ne vždycky se k tomu bude používat ta zmíněná komponenta. Pokud by to šlo řešit nějak hezky, raději bych tam to mazání měla jen jednou. (Jde mi o věci typu: ověřit existenci souboru, fyzicky smazat soubor, vypsat hlášku v případě, že se něco nepovede. Vlastní mazání entity provádí repozitář, jde mi o ten režijní kód okolo, který potřebuju mít v presenteru nebo komponentě kvůli flash messages a přesměrování/překreslení snippetu. Případně by to šlo řešit ještě traitou, ale do toho se mi nechce, aby v tom pak nebyl spíš binec.)

akadlec
Člen | 1326
+
0
-

a proč to musí být v komponentě? Proč na to nemít nějaký helper? Ten jen na daném místě zavoláš, on ti provede kontrollu a buď soubor smaže nebo hodí nějakou hlášku.

Jako v tom presenteru to můžeš dělat tak že si prostě vytáhneš všechny komponenty a jednu po druhé budeš invalidovat, ale zase se musíš dívat zda ta komponenta nemá komponenty atd…no dost prasacké, proto je vhodnější to udělal tak jak psal matěj, přesunout mazání tam kde se děje.

chikeet
Člen | 160
+
0
-

@matej21 nakonec jsem to hodila do té komponenty, asi to fakt bude nejlepší řešení – díky.
@akadlec tím helperem myslíš něco jako třeba service FilesManager, která bude řešit mazání souborů? Nedávno se mi na jednom projektu stalo, že jsem si na všechno napsala services a ve výsledku jsem měla spoustu kódu, který dělal relativně málo věcí a nejsem si jistá, jestli to celkově mělo smysl. Takže s psaním services na všechno jsem teď celkem opatrná. Celkově si teď ujasňuju, nakolik a kam je dobré delegovat zodpovědnosti, aby to bylo co nejefektivnější a nejsrozumitelnější, takže momentálně zvažuju různá řešení a zkouším různé přístupy (a kladu hloupé otázky, abych zjistila, jestli to nejde vyřešit líp, než mě zrovna napadá jako nejlepší způsob).

akadlec
Člen | 1326
+
0
-

Jo, třeba nějaká služba která se bude o ty soubory starta, mazat je, nahrávat atd.