Píšeme komponenty – komponenty vs control

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

Na stránce https://doc.nette.org/…n/components se v prvních odstavcích mluví o komponentách, ale spíš jsou to controls. Hlavně „Komponenta je zpravidla potomkem třídy Nette\Application\UI\Control, je matoucí, protože právě control dědí od component.

Je to větší úprava, tak se radši ptám: Davide, můžu to nějak opravit, nebo je to záměrné zjednodušení?

nanuqcz
Člen | 822
+
0
-

Možná trochu off-topic, ale všiml jsem si u cizích projektů (a tak to dělám taky), že lidi ukládají soubory s controls (vykreslitelné komponenty) do složky app/components. Je to tedy z tohoto hlediska špatně? (Měli by je ukládat do app/controls?)

22
Člen | 1478
+
0
-

@xxxObiWan:je to jedno, do čeho si to uložíš :-)

@Dite: do teď jsem myslel, že Control je taky komponenta a nějak nevidím důvod, proč Control nenazvat Component?

Editoval 22 (11. 8. 2011 12:13)

Mikulas Dite
Člen | 756
+
0
-

@xxxObiWan: tady to špatně není, protože každý Control je zároveň i Component. Ale máš pravdu, já třeba mám složku controls.

@22: To sice ano, ale ne každá komponenta je i control. Ale přesně na to se ptám, jestli je to v té dokumentaci zavádějící (zjednodušující) schválně, nebo jestli je to omyl.

Ani
Člen | 226
+
0
-

xxxObiWan napsal(a):

Možná trochu off-topic, ale všiml jsem si u cizích projektů (a tak to dělám taky), že lidi ukládají soubory s controls (vykreslitelné komponenty) do složky app/components. Je to tedy z tohoto hlediska špatně? (Měli by je ukládat do app/controls?)

My je tam třeba ukládáme, ale máme tam i formuláře, což jsou taky IComponent. Špatně to neni, ale je to víceméně jedno.

Ale komponenta bych controlu neříkal, právě třeba kvůli těm formulářům, pak na to bude někdo koukat a bude si říkat že „jsou to komponenty, ale ne controly, přitom komponenty mají být controly“. :p

Editoval Ani (11. 8. 2011 16:51)

David Grudl
Nette Core | 8147
+
0
-

Mám za to, že je to tam vysvětlené docela srozumitelně

Bavíme-li se o komponentách, obvykle myslíme potomky třídy Control. Přesnější by tedy bylo používat termín „controls“ (tj. ovládací prvky), ale „kontrola“ má v češtině zcela jiný význam a spíš se ujaly „komponenty“.

Jak bys to chtěl upravit?

Mikulas Dite
Člen | 756
+
0
-

Přečetl jsme si to znovu a už v tom vidím oboje:

„Komponenta je zpravidla potomkem třídy Nette\Application\UI\Control“

  1. Naše konkrétní komponenta kterou právě tvoříme je vykreslitelná a tak dědí od UI\Control.
  2. Component extends Control (což neplatí)

Možná se mi to zdálo divné, protože ty rozdíly znám, ale když uživatel čte dokumentaci, tak ho to asi nezmate.

22
Člen | 1478
+
0
-

Mikulas Dite napsal(a):
Možná se mi to zdálo divné, protože ty rozdíly znám, ale když uživatel čte dokumentaci, tak ho to asi nezmate.

Jaké jsou tedy ty hlavní rozdíly?

Mikulas Dite
Člen | 756
+
0
-

Control je vykreslitelná, má tedy metodu render. Component může být jenom logická. Navíc Control (jakožto potomek PresenterComponent) umí přímo komunikovat s presenterem (tzn. bez ručního procházení stromem komponent k parent presenteru) – render, invalidate, atp. Takhle na to koukám já, možná to někdo vidí jinak?