| 1 |
lars |
1 |
<com:TContent ID="body" >
|
|
|
2 |
<h1 id="701">Komponenty</h1>
|
|
|
3 |
<p id="110113" class="block-content">
|
|
|
4 |
Komponent jest instancją klasy lub klasy potomnej <tt>TComponent</tt>. Klasa bazowa <tt>TComponent</tt> implementuje mechanizm właściwości oraz zdarzeń kompomentu.
|
|
|
5 |
</p>
|
|
|
6 |
|
|
|
7 |
<h2 id="702">Właściwości komponentu (ang. component properties)</h2>
|
|
|
8 |
<p id="110114" class="block-content">
|
|
|
9 |
Właściwość kompoenentu może być postrzegana jako publiczna zmienna opsiującą określoną cechę/właściwość komponentu, taką jak kolor tła, rozmiar czcionki, itp. Właściwość jest definiowana poprzez istnienie metody getter i/lub setter w klasie. Na przykład w <tt>TControl</tt> definiujemy właściwość <tt>ID</tt> komponentu używając następujących funkcji typu getter i setter,
|
|
|
10 |
<com:TTextHighlighter CssClass="source block-content" id="code_110056">
|
|
|
11 |
class TControl extends TComponent {
|
|
|
12 |
public function getID() {
|
|
|
13 |
...
|
|
|
14 |
}
|
|
|
15 |
public function setID($value) {
|
|
|
16 |
...
|
|
|
17 |
}
|
|
|
18 |
}
|
|
|
19 |
</com:TTextHighlighter>
|
|
|
20 |
</p>
|
|
|
21 |
<p id="110115" class="block-content">
|
|
|
22 |
Aby pobrać lub ustawić właściwość <tt>ID</tt>, postępuj jak poniżej (tak jakbyś miał do czynienia ze zmienną):
|
|
|
23 |
<com:TTextHighlighter CssClass="source block-content" id="code_110057">
|
|
|
24 |
$id = $component->ID;
|
|
|
25 |
$component->ID = $id;
|
|
|
26 |
</com:TTextHighlighter>
|
|
|
27 |
Jest to równoznaczne z następującym zapisem:
|
|
|
28 |
<com:TTextHighlighter CssClass="source block-content" id="code_110058">
|
|
|
29 |
$id = $component->getID();
|
|
|
30 |
$component->setID( $id );
|
|
|
31 |
</com:TTextHighlighter>
|
|
|
32 |
</p>
|
|
|
33 |
<p id="110116" class="block-content">
|
|
|
34 |
Właściwość jest "tylko do odczytu" jeśli posiada metodę getter a nie posiada metody setter. Odkąd nazwy metod w PHP nie są zależne od wielkiej bądź małej litery, właściwości również są niewrażliwe na wielkość liter. Klasa kompomentu dziedziny wszystkie właściwości rodzica.
|
|
|
35 |
</p>
|
|
|
36 |
|
|
|
37 |
<h3 id="706">Subwłaściwości (ang. subproperties)</h3>
|
|
|
38 |
<p id="110117" class="block-content">
|
|
|
39 |
Subwłaściwość jest właściwością właściwości typu obiektowego. Dla przykładu <tt>TWebControl</tt> posiada właściwość <tt>Font</tt>, która jest typu <tt>TFont</tt>. Wtedy właściwość <tt>Name</tt> właściwości <tt>Font</tt> jest subwłaściwością w stosunku do <tt>TWebControl</tt>.
|
|
|
40 |
</p>
|
|
|
41 |
<p id="110118" class="block-content">
|
|
|
42 |
Aby pobrać lub ustawić subwłaściwość <tt>Name</tt> należy użyć następującej metody:
|
|
|
43 |
<com:TTextHighlighter CssClass="source block-content" id="code_110059">
|
|
|
44 |
$name = $component->getSubProperty('Font.Name');
|
|
|
45 |
$component->setSubProperty('Font.Name', $name);
|
|
|
46 |
</com:TTextHighlighter>
|
|
|
47 |
Jest to równoznaczne z następującym zapisem:
|
|
|
48 |
<com:TTextHighlighter CssClass="source block-content" id="code_110060">
|
|
|
49 |
$name = $component->getFont()->getName();
|
|
|
50 |
$component->getFont()->setName( $name );
|
|
|
51 |
</com:TTextHighlighter>
|
|
|
52 |
|
|
|
53 |
|
|
|
54 |
</p>
|
|
|
55 |
|
|
|
56 |
<h2 id="703">Zdarzenia komponentu</h2>
|
|
|
57 |
<p id="110119" class="block-content">
|
|
|
58 |
Zdarzenia komponentu są specjalnymi właściwościami, które pobierają nazwy metod jako swoje wartości. Przypisując (ustawiając) metodę do zdarzenia (will hook up the method ) do miejsca gdzie zdarzenie jest wywoływane. Dzięki temu zachowanie komponentu może zostać zmodyfikowane w sposób, który nie był przewidziany podczas fazy dewelopowania komponentu.
|
|
|
59 |
</p>
|
|
|
60 |
<p id="110120" class="block-content">
|
|
|
61 |
Zdarzenie komponentu jest definiowane poprzez istnienie metody, której nazwa zaczyna się przedrostkiem <tt>on</tt>. Nazwa zdarzenia jest nazwą metody i z tego powodu jest niewrażliwa na wielkość liter. Na przykład w komponencie <tt>TButton</tt> mamy:
|
|
|
62 |
<com:TTextHighlighter CssClass="source block-content" id="code_110061">
|
|
|
63 |
class TButton extends TWebControl {
|
|
|
64 |
public function onClick( $param ) {
|
|
|
65 |
...
|
|
|
66 |
}
|
|
|
67 |
}
|
|
|
68 |
</com:TTextHighlighter>
|
|
|
69 |
W ten sposób definiujemy metodę o nazwie <tt>OnClick</tt> a uchwyt do zdarzenia przez nią definiowanego może być przypisany w jeden z następujących sposobów:
|
|
|
70 |
<com:TTextHighlighter CssClass="source block-content" id="code_110062">
|
|
|
71 |
$button->OnClick = $callback;
|
|
|
72 |
$button->OnClick->add( $callback );
|
|
|
73 |
$button->OnClick[] = $callback;
|
|
|
74 |
$button->attachEventHandler( 'OnClick' , $callback );
|
|
|
75 |
</com:TTextHighlighter>
|
|
|
76 |
gdzie <tt>$callback</tt> odnosi się do poprawnej funkcji typu callback w PHP (np. nazwy funkcji, metody klasy <tt>array($object,'method')</tt>, itp.)
|
|
|
77 |
</p>
|
|
|
78 |
|
|
|
79 |
<h2 id="704">Przestrzenie nazw (ang. namespaces)</h2>
|
|
|
80 |
<p id="110121" class="block-content">
|
|
|
81 |
Przestrzeń nazw odnosi się do logicznego pogrupowania nazwy klas w taki sposób, że moga być one odróżniane od innych klas, których nazwy są identyczne. Ponieważ PHP nie wspiera przestrzeni nazw sam w sobie, nie można stworzyć instancji dwóch klas, które mają tą samoą nazwę ale różne definicje. Aby odróżniać się od klas użytkowników wszystkie klasy PRADO posiadają prefix 'T' (oznaczający 'Type' - z angielskiego: typ). Zachęcamy do nazywania własnych klas w ten sposób. W odróznieniu można dodawać prefiksy klas zaczynające się dowolną inną literą (lub grupą liter).
|
|
|
82 |
</p>
|
|
|
83 |
<p id="110122" class="block-content">
|
|
|
84 |
Przestrzeń nazw w PRADO jest postrzegana jako folder zawierający jednen lub więcej plików klas. Poprzez poprzedzania nazwy klasy przestrzenią nazw klasa może zostać określona jednoznacznie. Każda przestrzeń nazw jest w PRADO określona w następujący sposób:
|
|
|
85 |
<div class="source">
|
|
|
86 |
PathAlias.Dir1.Dir2
|
|
|
87 |
</div>
|
|
|
88 |
gdzie <tt>PathAlias</tt> jest aliasem jakiegoś katalogu, gdzie <tt>Dir1</tt> i <tt>Dir2</tt> są podkatalogami tego katalogu. Klasa o nazwie <tt>MyClass</tt> zdefiniowana w <tt>Dir2</tt> jest fully qualified poprzez <tt>PathAlias.Dir1.Dir2.MyClass</tt>.
|
|
|
89 |
</p>
|
|
|
90 |
<p id="110123" class="block-content">
|
|
|
91 |
By używać przestrzeni nazw w kodzie, napisz:
|
|
|
92 |
<com:TTextHighlighter CssClass="source block-content" id="code_110063">
|
|
|
93 |
Prado::using('PathAlias.Dir1.Dir2.*');
|
|
|
94 |
</com:TTextHighlighter>
|
|
|
95 |
co spowoduje dołączenie katalogu wskazywanego przez <tt>PathAlias.Dir1.Dir2</tt> do ścieżek include w PHP, dzięki czemu instancje klas zdefiniowanych w podanym katalogu mogą zostać utworzone bez podawania pełnej przestrzeni nazw. Możesz również zainkludować pojedyńczą definicję klasy poprzez
|
|
|
96 |
<com:TTextHighlighter CssClass="source block-content" id="code_110064">
|
|
|
97 |
Prado::using('PathAlias.Dir1.Dir2.MyClass');
|
|
|
98 |
</com:TTextHighlighter>
|
|
|
99 |
co spowoduje zainkludowanie pliku klasy <tt>MyClass</tt> jeśli nie została ona jeszcze zdefiniowana.
|
|
|
100 |
</p>
|
|
|
101 |
<p id="110124" class="block-content">
|
|
|
102 |
Aby zobaczyć więcej informacji o definiowaniu aliasów zobacz sekcję <a href="?page=Configurations.AppConfig">konfigurowanie aplikacji</a>.
|
|
|
103 |
</p>
|
|
|
104 |
|
|
|
105 |
<h2 id="705">Tworzenie instancji komponentu</h2>
|
|
|
106 |
<p id="110125" class="block-content">
|
|
|
107 |
Tworzenie instancji komponentu oznacza tworzenie instancji klasy komponentu. Rozróżniamy dwa typy instancji komponentu: statyczną i dynamiczną. Utworzone komponenty nazywane są odpowiednio komponentami statycznymi i dynamicznymi.
|
|
|
108 |
</p>
|
|
|
109 |
|
|
|
110 |
<h3 id="707">Dynamiczne tworzenie instancji komponentów</h3>
|
|
|
111 |
<p id="110126" class="block-content">
|
|
|
112 |
Dynamiczne tworzenie instancji komponentów oznacza tworzenie instancji komponentu w kodzie PHP. Wygląda to identycznie jak zwyczajne tworznie komponentów w PHP. Komponent może zostać dynamicznie utworzony w jeden z poniższych sposobów w PHP:
|
|
|
113 |
<com:TTextHighlighter CssClass="source block-content" id="code_110065">
|
|
|
114 |
$component = new ComponentClassName;
|
|
|
115 |
$component = Prado::createComponent('ComponentType');
|
|
|
116 |
</com:TTextHighlighter>
|
|
|
117 |
gdzie <tt>ComponentType</tt> wskazuje na nazwę klasy lub nazwę typu w formacie przestrzeni nazw (np. <tt>System.Web.UI.TControl</tt>). Drugi sposób został wprowadzony aby wypełnić brak wsparcia dla przestrzeni nazw w PHP.
|
|
|
118 |
</p>
|
|
|
119 |
|
|
|
120 |
<h3 id="708">Statyczne tworzenie instancji komponentów</h3>
|
|
|
121 |
<p id="110127" class="block-content">
|
|
|
122 |
Statyczne tworzenie instancji komponentów odnosi się do tworznenia komponentów poprzez <a href="?page=Configurations.Overview">konfigurację</a>. Proces tworzenia odbywa się po stronie frameworku. Na przykład w <a href="?page=Configurations.AppConfig">konfiguracji aplikacji</a> można skonfigurować moduł, który zostanie załadowany podczas uruchamiania aplikacji. Zatem moduł jest statycznym komponentem stworzonym przez framework. Statyczne tworzenie instancji jest często wspólnie używane w <a href="?page=Configurations.Templates1">szablonach</a>. Każdy tag komponentu w szablonie określa komponent, który będzie automatycznie stworzony przez framework, kiedy szablon będzie ładowany. Na przykład w szablonie strony następujący tag doprowadzi do stworzenia komponentu <tt>TButton</tt> na stronie:
|
|
|
123 |
<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_110066">
|
|
|
124 |
<com:TButton Text="Register" />
|
|
|
125 |
</com:TTextHighlighter>
|
|
|
126 |
</p>
|
|
|
127 |
|
|
|
128 |
<div class="last-modified">$Id: Components.page 2349 2008-01-01 17:54:32Z aztech $</div></com:TContent>
|