2

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

  1. 如何通过这些 a_hrefs 在 Graph Component 上引发事件(它们应该是 Graph 的一部分吗?)?
  2. 如何在不丢失当前页面上下文(部分、过滤器 - 指定为 $_GET 值)的情况下重绘图表?

我的图形组件如下所示:

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

2 回答 2

1

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

public function setPeriod($period)
 {
  if($this->hasEventHandler('onPeriodChange'))
      $this->onPeriodChange($this);
  $this->_period = $period;
 }
于 2012-10-09T06:38:05.657 回答
0

你可以这样提高它:

$graph = 新图();$event = new CEvent($graph); $graph->onPeriodChange($event);

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

于 2010-07-02T09:11:16.780 回答