Píšeme komponenty – komponenty vs control
- Mikulas Dite
- Člen | 756
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í?
- Mikulas Dite
- Člen | 756
@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
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žkyapp/components
. Je to tedy z tohoto hlediska špatně? (Měli by je ukládat doapp/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 | 8218
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
Přečetl jsme si to znovu a už v tom vidím oboje:
„Komponenta je zpravidla potomkem třídy Nette\Application\UI\Control“
- Naše konkrétní komponenta kterou právě tvoříme je vykreslitelná a tak dědí od UI\Control.
- 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.
- Mikulas Dite
- Člen | 756
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?