Zrušení automatické invalidace snippetů komponenty

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

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

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

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.

Honza Marek
Člen | 1664
+
0
-

Mohl bych poprosit o nějakou oficielní reakci? :)

David Grudl
Nette Core | 8218
+
0
-

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

Mě se nejvíce líbí forceRefresh(). Ale nevím, jak bych pojmenoval opak? disableRefresh()?

Honza Marek
Člen | 1664
+
0
-

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

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

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

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é?