yii 在CListView 更新后 afterAjaxUpdate event for widget

十度 Yii 2016年03月11日 收藏

Yii框架中的CGridView控件数据刷新是通过Ajax方式来实现的,如果有一些js脚本是在页面加载或重新加载的时候执行,那么在CGridView控件刷新的时候,这些js就得不到执行。这样会导致表格数据得到了更新,但部分js效果丢失的情况。解决的方法很简单,把页面加载时执行的js语句封装为函数,然后设置CGridView的afterAjaxUpdate属性,如下:

'afterAjaxUpdate' => 'function() { oops(); }'

在页面尾部添加js

<script type="text/javascript"> 
ops(); 
function oops() { alert('oops!'); } 
</script>

案例:

<?php 
Yii::app()->clientScript->registerScript('handle_ajax_function', "
function addLoadingClass(id,result)
{
    $('.list-view-loading').show();
    $('li.previous').addClass('disable');
    $('li.next').addClass('disable');   
}
function removeLoadingClass(id,result)
{   
    $('li.previous').removeClass('disable');
    $('li.next').removeClass('disable');    
    try{
        $('.list-view-loading').hide(); 
    }catch(e){
        alert(e);
    }
}
");?><?php
$this->widget('zii.widgets.CListView', array(
            'id'=>'handle',
            //'ajaxUpdate'=>false,
            'dataProvider'=>$data,
            'beforeAjaxUpdate'=>'addLoadingClass',
            'afterAjaxUpdate'=>'removeLoadingClass',
            'itemView'=>'myview',           
    )); ?>