2010-06-16 3 views
2

Supposons que j'ai Composant (disons Graph comme Yahoo Finance) rendu sur la page. Le modèle de vue de composant contient le paquet de a_hrefs que je veux changer de période dans le graphique. J'ai créé le gestionnaire d'événement et d'événement dans le composant. Je ai deux questions:Comment faire pour déclencher l'événement CComponent dans Yii

  1. Comment élever un événement sur le composant graphique via ces a_hrefs (devraient-ils faire partie de Graphique?)?
  2. Comment redessiner un graphique sans perdre le contexte de la page courante (section, filtre - spécifiée comme valeurs $ _GET)?

Mon graphique de composante se présentent comme suit:

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 
} 
} 

Répondre

0

Vous pouvez soulever cette façon:

graphique $ = new Graphique(); $ event = nouveau CEvent ($ graph); $ graph-> onPeriodChange ($ event); Pour redessiner le graphique, vous devez collecter les paramètres passés via $ _GET et les réutiliser lors de la création de l'URL pour refresh().

1

je pense que vous pourriez appeler si l'événement gestionnaires d'événements existent appeler ainsi

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