afterAjaxUpdate回调函数CListView显示未定义

时间:2012-06-09 12:02:23

标签: jquery ajax yii yii-components

我试图通过文件名的afterAjaxUpdate参数调用另一个js文件中定义的函数但是我在控制台中得到错误,函数未定义

<?php 
$dataProvider=new CActiveDataProvider('profiles',array('pagination'=>array('pageSize'=>3))); ?>
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_profilesview',
'template'=>'{sorter}<br />{pager}{items}{pager}',
    'enableSorting' => true,
    'sortableAttributes'=>array(
     'name'=>'By firstName',
     'location'=>'By city',
     'age'=>'By age',
     'likes'=>'By likes'
     ),
     'afterAjaxUpdate'=>'readcookie()',
));
 ?>

我的js功能是

$(document).ready(function(){
   function readcookie()
   {
       alert("hi");
   }
});

我可以在我的源代码中看到文件中定义的函数包含在yii默认包含的所有js文件之后 当我在我的布局中注册我的脚本时,它会找到$因为当我包含jquery时它不包括jquery它会被包含两次导致触发我的事件 我也尝试通过设置

  

的RenderPartial( 'Mybelowview',NULL,FALSE,TRUE)

这导致我的js文件再次包含多次,我的事件gots会多次触发。

这非常令人困惑,请帮助摆脱它 感谢所有人如此慷慨

1 个答案:

答案 0 :(得分:3)

问题是$(document).ready();内的函数超出了它的范围,这就是你得到 undefined 的原因。所以你可以拥有:

// $(document).ready(function(){
   function readcookie()
   {
       alert("hi");
   }
// });
// omit document.ready to make function available in the global scope

或在窗口对象上定义函数以使其成为全局:

$(document).ready(function(){
   window.readcookie=function ()
   {
       alert("hi");
   };
});

最后将属性'afterAjaxUpdate'定义为:

'afterAjaxUpdate'=>'readcookie'
// if it is readcookie() it becomes a function call instead