From 75a0a250cc6735d13b3b782daf0127298b37c2b9 Mon Sep 17 00:00:00 2001 From: wei <> Date: Thu, 4 May 2006 02:02:43 +0000 Subject: Adding TCallback component. --- framework/Web/UI/ActiveControls/TActiveControl.php | 125 +++++++++++++++++++-- 1 file changed, 113 insertions(+), 12 deletions(-) (limited to 'framework/Web/UI/ActiveControls/TActiveControl.php') diff --git a/framework/Web/UI/ActiveControls/TActiveControl.php b/framework/Web/UI/ActiveControls/TActiveControl.php index e61682d3..62470a18 100644 --- a/framework/Web/UI/ActiveControls/TActiveControl.php +++ b/framework/Web/UI/ActiveControls/TActiveControl.php @@ -6,14 +6,65 @@ class TActiveControl extends TControl implements ICallbackEventHandler, IActiveControl { + /** + * @var TCallbackClientSideOptions client-side options. + */ private $_clientSide; + /** + * Creates a new callback control, sets the adapter to + * TActiveControlAdapter. If you override this class, be sure to set the + * adapter appropriately by, for example, call this constructor. + */ public function __construct() { parent::__construct(); $this->setAdapter(new TActiveControlAdapter($this)); } + /** + * @return boolean whether callback event trigger by this button will cause + * input validation, default is true + */ + public function getCausesValidation() + { + return $this->getViewState('CausesValidation',true); + } + + /** + * @param boolean whether callback event trigger by this button will cause + * input validation + */ + public function setCausesValidation($value) + { + $this->setViewState('CausesValidation',TPropertyValue::ensureBoolean($value),true); + } + + /** + * @return string the group of validators which the button causes validation + * upon callback + */ + public function getValidationGroup() + { + return $this->getViewState('ValidationGroup',''); + } + + /** + * @param string the group of validators which the button causes validation + * upon callback + */ + public function setValidationGroup($value) + { + $this->setViewState('ValidationGroup',$value,''); + } + + /** + * Callback client-side options can be set by setting the properties of + * the ClientSide property. E.g. + * See {@link TCallbackClientSideOptions} for details on the properties of + * ClientSide. + * @return TCallbackClientSideOptions client-side callback options. + */ public function getClientSide() { if(is_null($this->_clientSide)) @@ -21,28 +72,78 @@ class TActiveControl extends TControl implements ICallbackEventHandler, IActiveC return $this->_clientSide; } + /** + * @return TCallbackClientSideOptions callback client-side options. + */ protected function createClientSideOptions() { - $client = new TCallbackClientSideOptions; - return $client; + return new TCallbackClientSideOptions; } + + /** + * @return boolean whether to perform validation if the callback is + * requested. + */ + protected function canCauseValidation() + { + if($this->getCausesValidation()) + { + $group=$this->getValidationGroup(); + return $this->getPage()->getValidators($group)->getCount()>0; + } + else + return false; + } + /** + * Raises the callback event. This method is required by {@link + * ICallbackEventHandler} interface. If {@link getCausesValidation + * CausesValidation} is true, it will invoke the page's {@link TPage:: + * validate validate} method first. It will raise {@link onCallback + * OnCallback} event. This method is mainly used by framework and control + * developers. + * @param TCallbackEventParameter the event parameter + */ public function raiseCallbackEvent($param) { - var_dump($param->getParameter()); - $param->Output->write($param->Parameter); - $client = $this->getPage()->getCallbackClient(); - $client->hide($this); - $client->toggle($this); - $client->update($this, 1); - $param->setData(array("asdasdad",1)); + if($this->getCausesValidation()) + $this->getPage()->validate($this->getValidationGroup()); + $this->onCallback($param); + } + + /** + * This method is invoked when a callback is requested. The method raises + * 'OnCallback' event to fire up the event handlers. If you override this + * method, be sure to call the parent implementation so that the event + * handler can be invoked. + * @param TCallbackEventParameter event parameter to be passed to the event handlers + */ + public function onCallback($param) + { + $this->raiseEvent('OnCallback', $this, $param); } + /** + * @return array list of callback javascript options. + */ + protected function getCallbackOptions() + { + $validate = $this->getCausesValidation(); + $options['CausesValidation']= $validate ? '' : false; + $options['ValidationGroup']=$this->getValidationGroup(); + return $options; + } + + /** + * Returns the javascript statement to invoke a callback request for this + * control. Additional options for callback can be set via subproperties of + * {@link getClientSide ClientSide} property. E.g. ClientSide.OnSuccess="..." + * @return string javascript statement to invoke a callback. + */ public function getCallbackReference() { - // $formID = $this->getPage()->getForm()->getClientID(); - // $this->getClientSide()->setValidationForm($formID); - return $this->getPage()->getClientScript()->getCallbackReference($this); + $client = $this->getPage()->getClientScript(); + return $client->getCallbackReference($this, $this->getCallbackOptions()); } } -- cgit v1.2.3