下列資料供參考
- http://www.cnblogs.com/JosephLiu/archive/2011/12/12/2285078.html
- http://www.php1.cn/article/6396.html
- http://yiibook.com/book/yii1.1_application_development_cookbook/chapter-1
Event
事件處理
這裡的$this通常為CComponent的子類實例
- 定義事件,raiseEvent: 啟動事件,觸發CList中所有handler
1 | public function onFuck($event) |
- 為事件加上某個event handler
1 | $handler = function () { |
- 在某處觸發事件
1 | // hasEventHandler用來檢查event的CList(_e['onFuck'])是否有被加上event hanlder |
issue
為事件加上eventHandler有很多寫法
目前還沒瞭解差異在哪
1 | $this->onClick = $handler; |
1 | $this->onClick->add($handler); |
1 | $this->attachEventHandler('onClick', $handler); |
1 | $this->getEventHandlers('onClick')->add($handler); |
1 | // 加在handler list指定位置,一般預設是放在最後 |
實驗結果看起來上述所有用法都是一樣的結果
可以添加多個handler,也都可以detachEventHandler移除特定的handler
加入重複的hanlder一樣會在CList中累積增加,但detach只會移除一個
比較有趣的是最簡化的寫法$this->onClick = $handler;
乍看之下重複assign好像會覆蓋,但其實不會,與其他效果相同
如果在某handler處理完後不想繼續後面的,可以在傳入handler的事件中設定$event->handled = true;
class CEvent 被放在class CComponent的檔案中,這是一個比較奇怪的點