我使用 Yiiwheels。我想更改组合框以选择 2 个小部件,但尚未加载相关资产。丑陋的解决方案是在隐藏跨度中创建一个虚拟 select2 元素,因此资产会自动加载。但是有没有更好的方法来做到这一点,我的意思是加载小部件资产的功能?
问问题
304 次
1 回答
2
您正在寻找的registerClientScript()
功能是WhSelect2
Yiiwheels 中小部件类中的功能。
虽然创建一个空的小部件是注册脚本的最简单方法,但您也可以直接使用类似这样的方式调用它
<?php Yii::import('yiiwheels.widgets.select2.WhSelect2');
$w = new WhSelect2();
$w->registerClientScript();
?>
该registerClientScript()
函数init()
在widget创建过程中被调用,以下是该函数执行的操作,完整代码见github上的WhSelect2
/**
* 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);
}
于 2014-07-19T17:10:11.953 回答