Javascript in PRADO, Questions and Answers

How do I include the Javascript libraries distributed with Prado?

The javascript libraries distributed with Prado can be found in the framework/Web/Javascripts/source directory. The packages.php file in that directory defines a list of available package names available to be loaded. They can be loaded as follows.

The available packaged libraries included in Prado are

The dependencies for each library are automatically resolved. Components that require a particular library will also automatically load the necessary libraries. For example, if you add a TDatePicker component on the page, the datepicker and its dependencies will be automatically included on the page.

See TClientScript for options of adding your custom Javascript code to the page.

Publishing Javascript Libraries as Assets

Use TClientScriptLoader to publish and combine multiple existing javascript files (e.g. javascript libraries distributed with Prado or otherwise) as packages.

For greater control on what and when to publish, use the registerJavascriptPackages($base, $packages, $debug=null, $gzip=true) method in the TClientScriptManager class, which an instance can be obtained using $this->getPage()->getClientScript() or its equivalents. For example, if multiple controls will use the same set of javascript libraries, write a class to handle the registration of packages required by those controls.

class MyJavascriptLib extends TComponent { private $_packages=array(); //keep track of all registrations private $_manager; protected function __construct(TPage $owner) { $this->_manager = $owner->getClientScript(); $owner->onPreRenderComplete = array($this, 'registerScriptLoader'); } public static function registerPackage(TControl $control, $name) { static $instance; if($instance===null) $instance=new self($control->getPage()); $instance->_packages[$name]=true; } protected function registerScriptLoader() { $dir = dirname(__FILE__).'/myscripts'; //contains my javascript files $scripts = array_keys($this->_packages); $url = $this->_manager->registerJavascriptPackages($dir, $scripts); $this->_manager->registerScriptFile($url,$url); } } // example control class using the javascript packages class TestComp extends TControl { public function onPreRender($param) { parent::onPreRender($param); MyJavascriptLib::registerPackage($this,'package1'); } }
$Id$