životní cyklus presenteru, přepsání obsahu komponenty
- kleinpetr
- Člen | 480
Ahoj,
pravděpodobně jsem se nějak zamotal do životního cyklu presenteru spolu s komponentou a nevím jak z toho ven.
Mám komponentu Uploader, která vykreslí nějaký drag&drop box, po
uploadu souboru se v komponentě zavolá metoda handleUpload(), která
vytvoří Utils\Image objekt a poté zavolá
callable[] onUpload($file)
v presenteru si tedy obrázek vezmu a
uložím do db atd..
Další metoda komponenty je addFile($id,$thumb)
která přidá
do pole $files[] obrázek a tohle pole poté v render() odesílám do
template v komponentě
V presenteru při vytváření komponenty
createComponentUploader()
přidám obrázky pomocí
addFile()
, zatím je vše ok.
Další metoda je handleRemove()
, která zavolá
callable[] onRemove($id)
a poté v presenteru odstraním
podle ID.
V presenteru, tedy odstraním ten obrázek z db a zavolám
$this->redrawControl()
ZDE nastává problém. Porotože nejprve
se provede createComponent()
a až poté se
zavolá onRemove()
Zkoušel jsem plnit ten uploader i jinde než při vytváření komponenty, ale vždy byl výsledek stejný.
Editoval kleinpetr (24. 11. 2015 15:18)
- David Matějka
- Moderator | 6445
A kde je problem? ze ten smazany soubor si jiz pridal pres addFile? tak ho v komponente odeber. anebo jestli ty addFile jsou jen pro vykresleni, tak to volej v render* metode
- kleinpetr
- Člen | 480
No problém je v tom, že po zavolání handleRemove()
se
soubor smaže, ale neaktualizuje se mi ten seznam souborů, které jsou jak
píšeš jen pro vykreslení.
v Presenteru mám metodu actionDetail($id)
a když jsem
zkoušel naplnit ten uploader v ní, tak byl výsledek stejný. Podle cyklu
presenteru to dává smysl, že se nejdřív načte actionMetoda a až poté
handle<Signal> ale i to funguje dost zvláštně, protože jsem zkoušel
ověřovat, tak, že jsem vyzkoušel např. při výpisu nějakých dat, kde po
smazání řádku také volám handleRemove() a vše funguje tak jsem zkusil
renderList()
, ve které předávám data, přepsat na
actionList()
ale i tak to stále funguje dobře. Takže jsem
z toho trochu zmatenej
Editoval kleinpetr (24. 11. 2015 15:34)
- David Matějka
- Moderator | 6445
A kde je problem s tim, co jsem psal? tedy bud
- v handleRemove smazat z tech souboru ulozenych v komponente s tim id
- nebo nastavit soubory az v renderList, ktere se vola po handleRemove
- kleinpetr
- Člen | 480
Jojo, s tím smazáním v komponentě je dobré, akorát nevím jestli může callable[] metoda něco vracet, protože když se v presenteru stane nějaký problém, tak samozřejmě nebudu chtít smazat ten soubor v komponentě.
K tomu druhýmu, tam je problém, že to používám na detailu a to je
actionDetail()
takže se také volá před handleRemove()
- David Matějka
- Moderator | 6445
jestli může callable[] metoda něco vracet, protože když se v presenteru stane nějaký problém, tak samozřejmě nebudu chtít smazat ten soubor v komponentě.
obvykle nic nevraci, mohl bys vyuzit vyjimku, pripadne volej removeItem z toho callbacku
K tomu druhýmu, tam je problém, že to používám na detailu a to je actionDetail()
tak tam pridej i renderDetail, ne?