YII:如何在不调用窗口小部件的情况下注册yiiwheels窗口小部件资产

时间:2014-07-19 09:56:20

标签: php yii assets yii-extensions yii-widgets

我使用Yiiwheels。我想更改组合框以选择2小部件,但尚未加载相关资产。丑陋的解决方案是在隐藏范围内创建虚拟select2元素,因此资产会自动加载。但有没有更好的方法,我的意思是加载小部件资产的功能?

1 个答案:

答案 0 :(得分:2)

您正在寻找的功能是Yiiwheels中registerClientScript()小部件类中的WhSelect2函数。

虽然创建一个空小部件是注册脚本的最简单方法,但您也可以使用类似的方式直接调用它

<?php Yii::import('yiiwheels.widgets.select2.WhSelect2');
    $w = new WhSelect2(); 
    $w->registerClientScript();
?>

在创建小部件期间registerClientScript()调用中调用init()函数,以下是此函数执行的操作。有关完整代码,请参阅WhSelect2 on github

   /**
    * Registers required client script for bootstrap select2. It is not used through bootstrap->registerPlugin
    * in order to attach events if any
    */
    public function registerClientScript()
    {
        /* publish assets dir */
        $path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'assets';
        $assetsUrl = $this->getAssetsUrl($path);

        /* @var $cs CClientScript */
        $cs = Yii::app()->getClientScript();

        $cs->registerCssFile($assetsUrl . '/css/select2.css');
        $cs->registerScriptFile($assetsUrl . '/js/select2.js');


        if ($this->language) {
            $cs->registerScriptFile(
                $assetsUrl . '/js/locale/select2_locale_' . $this->language . '.js',
                CClientScript::POS_END
            );
        }

        /* initialize plugin */
        $selector = '#' . TbArray::getValue('id', $this->htmlOptions, $this->getId());

        $this->getApi()->registerPlugin('select2', $selector, $this->pluginOptions, CClientScript::POS_READY);
        $this->getApi()->registerEvents($selector, $this->events, CClientScript::POS_READY);
    }