如何在Yii中引发Component事件

时间:2010-06-16 08:14:22

标签: php events yii

我们假设我在页面上呈现了Component(比如Yahoo Finance)。组件视图模板包含一堆a_hrefs,我想在图表中切换周期。我在Component中创建了Event和Event处理程序。我有两个问题:

  1. 如何通过那些a_hrefs在Graph Component上引发事件(它们应该是Graph的一部分吗?)?
  2. 如何在不丢失固定页面上下文的情况下重绘图形(部分,过滤器 - 指定为$ _GET值)?
  3. 我的图表组件如下所示:

    Yii::import('zii.widgets.CPortlet');
    
    
    class Graph extends CPortlet
    {
     private $_period;
    
    /* **************************************** *
     *          COMPONENT PROPERTIES            *
     * **************************************** */
    
     public function getPeriod()
     {
      return $this->_period;
     }
    
     public function setPeriod($period)
     {
      $this->_period = $period;
     }
    
    /* **************************************** *
     *                 GENERIC                  *
     * **************************************** */
    
     public function init()
     {
      parent::init();
    
      // assign event handlers
      $this->onPeriodChange = array($this, 'handlePeriodChange');
     }
    
    
     protected function renderContent()
     {
      $this->render('graph');
     }
    
    /* **************************************** *
     *                 EVENTS                   *
     * **************************************** */
    
     public function onPeriodChange($event)
     {
      $this->raiseEvent('onPeriodChange', $event);
     }
    
    /* **************************************** *
     *              EVENT HANDLERS              *
     * **************************************** */
    
     public function handlePeriodChange($event)
     {
      // CODE
     }
    }
    

2 个答案:

答案 0 :(得分:1)

我认为如果事件处理程序存在,您可以调用,因此调用事件

public function setPeriod($period)
 {
  if($this->hasEventHandler('onPeriodChange'))
      $this->onPeriodChange($this);
  $this->_period = $period;
 }

答案 1 :(得分:0)

你可以这样提高:

$ graph = new Graph();   $ event = new CEvent($ graph);   $ graph-> onPeriodChange($事件);

要重绘图形,您应该收集通过$ _GET传递的参数,并在为refresh()形成网址时再次使用它们。