Control::invalidateControls()

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

Navrhuji přidání metody invalidateControls do třídy Control. Řešila by invalidaci několika položek najednou.

Mnou navrhovaná implementace: https://gist.github.com/…27f69607dc6a.

Autorem myšlenky je MelkorNemesis.

Editoval Majkl578 (23. 3. 2010 23:55)

Honza Marek
Člen | 1664
+
0
-

Něco takovýho by nebylo špatný mít ve frameworku. Akorát název invalidateControls je docela nešťastný, když to slouží k invalidaci více snippetů v jednom controlu. Takže asi invalidateSnippets. K diskuzi bych dal i založení metody invalidateSnippet, protože invalidateControl($snippet) může být podle mě pro začátečníka matoucí.

Editoval Honza Marek (24. 3. 2010 11:08)

pekelnik
Člen | 462
+
0
-

Honza Marek napsal(a):

… název invalidateControls je docela nešťastný, když to slouží k invalidaci více snippetů v jednom controlu. Takže asi invalidateSnippets. K diskuzi bych dal i založení metody invalidateSnippet, protože invalidateControl($snippet) může být podle mě pro začátečníka matoucí.

Domnívám se, že nejenom pro začátečníka. Odkdy je snippet control?

Majkl578
Moderator | 1364
+
0
-

pekelnik napsal(a):

Domnívám se, že nejenom pro začátečníka. Odkdy je snippet control?

Souhlasím, také mi to přijde dost WTF.

Jedna otázka do pranice:
Jak se zachová aplikace, kde budu v šabloně mít komponentu „foo“ a zároveň snippet pojmenovaný „foo“ a použiji $this->invalidateControl('foo')?

jasir
Člen | 746
+
0
-

+1

Honza Marek
Člen | 1664
+
0
-

pekelnik napsal(a):

Domnívám se, že nejenom pro začátečníka. Odkdy je snippet control?

Pokročilý si prostě zvykne.

Majkl578 napsal(a):
Jak se zachová aplikace, kde budu v šabloně mít komponentu „foo“ a zároveň snippet pojmenovaný „foo“ a použiji $this->invalidateControl('foo')?

Tak… invaliduje to snippet, což je samozřejmě v rozporu s tím, jak ten kód vypadá.

pekelnik
Člen | 462
+
0
-

Když je něco divný tak si na to nechci zvyknout :)

Majkl578
Moderator | 1364
+
0
-

Souhlas s pekelnikem. Je to WTF, nehledě na to, jaké zkušenosti člověk má.

Majkl578
Moderator | 1364
+
0
-

Upravil jsem ještě ten gist.


Celá současná implementace je podle mě nevhodná. Proč?
 – Invalidovat více snippetů metodou invalidateControl() mi přijde nelogické – k tomu invalidateControls().
 – Invalidovat snippet pomocí invalidateControl() je podivné – takže invalidateSnippet() (jak navrhl Honza).

Navrhl bych tedy k diskuzi nové (a asi i zpětně nekompatibilní) rozhraní pro implementaci:

invalidateControl()/invalidateSnippet() (invalidace komponenty respektive snippetu)
 – invalidateControls()/invalidateSnippets() (invalidace více komponent respektive snippetů)
 – isControlInvalid()/isSnippetInvalid() (kontrola validity komponenty respektive snippetu)
 – areControlsInvalid()/areSnippetsInvalid() (kontrola validity více komponent respektive snippetů)
 – validateControl()/validateSnippet() (zvalidovat komponentu respektive snippet)
 – validateControls()/validateSnippets() (zvalidovat více komponent respektive snippetů)

Co vy na to?

Editoval Majkl578 (25. 3. 2010 22:07)

pekelnik
Člen | 462
+
0
-

pěkně shrnuto :)

akorát bych navrhoval inteligentní práci s argumenty v metodě invalidateSnippet

pokud zadám více parametrů – invaliduje se více snippetů – imho není nutná duplicita metod

Majkl578
Moderator | 1364
+
0
-

To bych tu univerzální pojmenoval invalidateSnippets.

pekelnik
Člen | 462
+
0
-

to je rozumnej plán :)

Honza Marek
Člen | 1664
+
0
-

Majkl: Naprosto ten seznam nechápu… proč tam máš vždycky dvě možnosti, když snippet a control je něco úplně jiného?

IMHO metoda invalidateControl, která zneplatní všechny snippety v controlu, je naprosto v pořádku. IsControlInvalid, pokud kontroluje platnost celé komponenty, tak taky. Metody areControlsInvalid()/areSnippetsInvalid() vůbec nerozumim k čemu jsou dobrý.

Jako další námět k diskuzi by se dalo vzít taky slovo invalidate, když je tak divný :-D