Files
yii/docs/guide/id/basics.component.txt
2009-11-01 17:58:27 +00:00

169 lines
6.2 KiB
Plaintext

Komponen
========
Aplikasi Yii dibangun setelah komponen berupa obyek ditulis menjadi
spesifikasi. Sebuah komponen adalah turunan dari
[CComponent] atau kelas sebelumnya. Pemakaian komponen meliputi
pengaksesan propertinya dan memunculkan/menangani event-nya. Kelas basis
[CComponent] menetapkan bagaimana untuk mendefinisikan properti dan event.
Properti Komponen
-----------------
Properti komponen seperti variabel anggota public sebuah obyek. Kita dapat
membaca nilainya atau menempatkan sebuah nilai ke dalamnya. Sebagai contoh,
~~~
[php]
$width=$component->textWidth; // ambil properti textWidth
$component->enableCaching=true; // setel properti enableCaching
~~~
Untuk mendefinisikan properti komponen, kita cuku mendeklarasian variabel
anggota public dalam kelas komponen. Cara yang lebih fleksibel adalah dengan
mendefinisikan metode getter (pengambil) dan setter (penyetel) seperti berikut:
~~~
[php]
public function getTextWidth()
{
return $this->_textWidth;
}
public function setTextWidth($value)
{
$this->_textWidth=$value;
}
~~~
Kode di atas mendefinisikan properti yang bisa ditulis dengan nama `textWidth` (nama
sensitif jenis huruf). Ketika membaca properti, `getTextWidth()` dipanggil
dan nilai yang dihasilkannya menjadi nilai properti; Hal yang mirip, saat menulis
properti, `setTextWidth()` dipanggil. Jika metode penyetel tidak didefinisikan,
properti akan menjadi hanya-baca dan menulisinya akan memunculkan sebuah
eksepsi. Menggunakan metode pengambil dan penyetel untuk mendefinisikan sebuah
properti memiliki keuntungan bahwa logika tambahan (seperti melakukan validasi, memunculkan event)
dapat dijalankan saat membaca dan menulis properti.
>Note|Catatan: Ada perbedaan menyolok antara properti yang didefinisikan via metode
pengambil/penyetel dan variabel anggota kelas. Nama pengambil/penyetel
tidak sensitif jenis huruf sementara variabel anggota kelas sensitif jenis huruf.
Event Komponen
--------------
Event komponen adalah properti khusus yang mengambil metode (disebut `pengendali event`)
sebagai nilainya. Melampirkan (menempatkan) metode ke sebuah event akan
menyebabkan metode dipanggil secara otomatis di tempat di mana event
dimunculkan. Oleh karena itu, perilaku komponen bisa diubah dengan cara yang
tidak bisa dilihat selama pengembangan komponen.
Event komponen didefinisikan dengan mendefinisikan sebuah metode yang namanya dimulai
dengan `on`. Seperti nama properti yang didefinisikan via metode pengambil/penyetel, nama event tidak
sensitif jenis huruf. Kode berikut mendefinisikan sebuah event `onClicked`:
~~~
[php]
public function onClicked($event)
{
$this->raiseEvent('onClicked', $event);
}
~~~
di mana `$event` adalah turunan [CEvent] atau anak kelasnya yang menyediakan
parameter event.
Kita dapat melampirkan sebuah metode ke event ini seperti berikut:
~~~
[php]
$component->onClicked=$callback;
~~~
di mana `$callback` merujuk ke PHP callback yang benar. Ia bisa berupa fungsi
global atau metode kelas. Jika metode kelas, callback harus dibentuk sebagai
array: `array($object,'methodName')`.
Tanda tangan pengenali event harus seperti berikut:
~~~
[php]
function methodName($event)
{
......
}
~~~
di mana `$event` merupakan parameter yang menjelaskan event (ia berasal dari
panggilan `raiseEvent()`). Parameter `$event` adalah turunan dari [CEvent] atau
kelas sebelumnya. Pada kondisi minimum, ia berisi informasi mengenai siapa
yang memunculkan event.
Jika kita memanggil `onClicked()` sekarang, event `onClicked` akan dimunculkan (di dalam
`onClicked()`), dan pengendali event terlampir akan dipanggil secara
otomatis.
Sebuah event dapat dilampirkan ke multipel pengendali. Saat event dimunculkan,
pengendali akan dipanggil dengan urutan di mana ia dilampirkan ke event.
Jika sebuah pengendali memutuskan untuk menghindari pemanggilan pengendali berikutnya,
bisa dilakukan dengan menyetel [$event->handled|CEvent::handled] menjadi true.
Perilaku Komponen
-----------------
Mulai dari versi 1.0.2, sebuah komponen sudah ditambahkan guna mendukung [mixin](http://en.wikipedia.org/wiki/Mixin)
dan dapat dilampirkan dengan satu atau beberapa perilaku. Sebuah *perilaku* adalah obyek
yang metodenya bisa 'inherited' (diturunkan) dengan komponen lampirannya dalam arti pengumpulan
fungsionalitas daripada spesialisasi (misal, penurunan kelas normal).
Komponen dapat dilampirkan ke beberapa perilaku dan selanjutnya melakukan 'multipel penurunan'.
Kelas perilaku harus mengimplementasikan antar muka [IBehavior]. Umumnya perilaku dapat
diperluas dari kelas basis [CBehavior]. Jika perilaku perlu dilampirkan ke sebuah
[model](/doc/guide/basics.model), ia juga bisa diperluas dari [CModelBehavior] atau
[CActiveRecordBehavior] yang mengimplementasikan fitur tambahan tertentu untuk model.
Untuk menggunakan perilaku, ia harus dilampirkan ke sebuah komponen lebih dulu dengan memanggil metode
perilaku [attach()|IBehavior::attach]. Kemudian kita memanggil metode perilaku melalui komponen:
~~~
[php]
// $name secara unik mengidentifikasi behavior dalam komponen
$behavior->attach($name,$component);
// test() adalah metode $behavior
$component->test();
~~~
Perilaku yang dilampirkan dapat diakses seperti layaknya properti komponen.
Sebagai contoh, jika perilaku bernama `tree` dilampirkan ke komponen, kita
bisa memperoleh referensi ke obyek perilaku ini menggunakan:
~~~
[php]
$behavior=$component->tree;
// sama dengan kode berikut:
// $behavior=$component->asa('tree');
~~~
Sebuah perilaku dapat dimatikan sementara agar metodenya tidak tersedia pada komponen.
Sebagai contoh,
~~~
[php]
$component->disableBehavior($name);
// pernyataan berikut akan memunculkan eksepsi
$component->test();
$component->enableBehavior($name);
// ia bekerja sekarang
$component->test();
~~~
Dimungkinkan bahwa dua perilaku dilampirkan ke komponen yang sama yang memiliki nama metode yang sama.
Dalam hal ini, perilaku metode pertama yang akan diprioritaskan.
Ketika dipakai bersama dengan [event](#component-event), perilaku bahkan lebih bertenaga.
Sebuah perilaku, bila dilampirkan ke sebuah komponen dapat melampirkan beberapa metodenya ke beberapa event
komponen. Dengan melakukan itu, perilaku mendapat kesempatan untuk mengawasi atau mengubah alur
eksekusi normal komponen.
<div class="revision">$Id: basics.component.txt 1328 2009-08-15 18:45:51Z qiang.xue $</div>