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', )); ?>