Yii2 如何更好的在页面注入JavaScript

Yii · forecho · 于 4年前 发布 · 14041 次阅读

首先

先添加一个widgets,代码如下(提示:使用时注意修改命名空间)

<?php
/**
 * User: yiqing
 * Date: 14-9-15
 * Time: 下午12:09
 */
 
namespace year\widgets;
 
use yii\web\View ;
use yii\widgets\Block ;
 
 
class JsBlock extends Block{
 
    /**
     * @var null
     */
    public $key = null;
    /**
     * @var int
     */
    public $pos = View::POS_END ;
    /**
     * Ends recording a block.
     * This method stops output buffering and saves the rendering result as a named block in the view.
     */
    public function run()
    {
        $block = ob_get_clean();
        if ($this->renderInPlace) {
           throw new \Exception("not implemented yet ! ");
           // echo $block;
        }
        $block = trim($block) ;
        /*
        $jsBlockPattern  = '|^<script[^>]*>(.+?)</script>$|is';
        if(preg_match($jsBlockPattern,$block)){
            $block =  preg_replace ( $jsBlockPattern , '${1}'  , $block );
        }
        */
        $jsBlockPattern  = '|^<script[^>]*>(?P<block_content>.+?)</script>$|is';
        if(preg_match($jsBlockPattern,$block,$matches)){
            $block =  $matches['block_content'];
        }
 
        $this->view->registerJs($block, $this->pos,$this->key) ;
    }
}

使用

示例如下:

<?php \year\widgets\JsBlock::begin() ?>
<script >
    $(function(){
        jQuery(".company_introduce").slide({mainCell:".bd ul",effect:"left",autoPlay:true,mouseOverStop:true});
    });
</script>
<?php \year\widgets\JsBlock::end()?>

总结

为什么要这么写?

这样写的好处有两个,有代码提示和有代码高亮!!

来源

本帖已被设为精华帖!
共收到 0 条回复 Widgets Yii2 JavaScript
没有找到数据。
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册