2

コンポーネント (たとえば、Yahoo Finance のようなグラフ) がページにレンダリングされているとします。コンポーネント ビュー テンプレートには、グラフの期間を切り替えたい a_hrefs の束が含まれています。コンポーネントにイベントとイベントハンドラを作成しました。2 つの質問があります。

  1. これらのa_hrefsを介してグラフコンポーネントでイベントを発生させる方法(グラフの一部である必要がありますか?)?
  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 に答える