Zrušení automatické invalidace snippetů komponenty
- Honza Marek
- Člen | 1664
Nevyhovuje mi chování, kdy pokud komponenta obdrží signál, tak se invaliduje. Pokud třeba mám signál na ajaxové načtení formuláře, tak se mi potom zbytečně posílají všechny ostatní snippety ve stránce.
Přemýšlel jsem, že by to šlo vyřešit přepsáním metody processSignal. Nejdříve by si zálohovala pole invalidních snippetů, potom by se spustila metoda parent::processSignal a nakonec by se invalidní snippety vrátily do původního stavu. Pokud je ale pole invalidSnippets private, tak se k němu nedostanu.
- Ondřej Mirtes
- Člen | 1536
Taky by mě zajímalo, proč je to defaultní chování. Já to řeším tak,
že kde mi to nevyhovuje, zavolám $this->validateControl()
.
Možná by to šlo zavolat už někde v BasePresenteru a mít to tak
vyřešené.
- Honza Marek
- Člen | 1664
Jo ale to by šlo nejdřív v beforeRender, protože ta invalidace nastane ve fázi zpracování signálů. Pokud bych se čistě náhodou rozhod nějaký snippet invalidovat už dřív, tak mi to nepomůže.
- David Grudl
- Nette Core | 8218
Teoreticky se to může v 0.9 udělat, jen se těžko řeší kompatibilita.
Nejlepší by bylo, kdyby si to AJAXoví vývojáři hromadně vypnuli odstraněním tohoto kódu v Presenter.php:
// auto invalidate
if ($component instanceof IRenderable) {
$component->invalidateControl();
}
A vyzkoušeli s tím rozchodit své aplikace a podali nějakou zprávu.
p.s. co si myslíte o tomto?
- Honza Kuchař
- Člen | 1662
Mě se nejvíce líbí forceRefresh()
. Ale nevím, jak bych
pojmenoval opak? disableRefresh
()?
- Honza Marek
- Člen | 1664
Teoreticky se to může v 0.9 udělat, jen se těžko řeší kompatibilita.
To každopádně. Ale určitě by to šlo udělat volitelně, to by byl jen jeden if navíc. A ve výchozím nastavení bez zneplatnění komponent, které obdrží signál, protože mi ze začátku přišlo jako černá magie.
A vyzkoušeli s tím rozchodit své aplikace a podali nějakou zprávu.
Zkouším zkouším. Zatím mám pocit, jako bych se zbavil magic quotes, ale na nějaké hodnocení je zatím brzy.
p.s. co si myslíte o tomto?
No… to validateControl je docela zvláštní název. Ale co, zvyknul jsem si.
- Honza Marek
- Člen | 1664
Malý postřeh. Asi by bylo by hezké umožnit
$control->invalidateControl(array("edit", "text"));
, když je
ten název metody tak dlouhej.
- Honza Marek
- Člen | 1664
Tak myslím, že jsem nabral dostatek zkušeností s životem bez automatické invalidace. Dělá se mi s tím v pohodě a snippety se s tím dají využít lépe.
- Honza Marek
- Člen | 1664
Už docela dlouho si spokojeně žiju bez automatické invalidace snippetů, nešlo by to tedy udělat nějak nastavitelné, abych to měl jakože oficiálně podporované?