在调用ajax后,我正在调用函数
$this->widget('zii.widgets.CListView', array(
'viewData'=>array('sent'=>$sent),
'dataProvider'=>$dp,
'pager' => array(
'prevPageLabel'=>'< Anterior',
'nextPageLabel'=>'Siguiente >',
'header'=>'Pagina: ',
'pageSize'=>5,),
'template'=>"{items}\n{pager}", //template
'itemView'=>'_messageView',
'emptyText'=>'No ha recibido ningun mensaje todavia',
'enablePagination'=>true,
'baseScriptUrl'=>'/../../Javascript/messages/messages.js',
'afterAjaxUpdate' => 'js:callFunction()',
'id'=>'listMessages',
));
函数callFunction()是在一个单独的js文件中定义的,我在第一次加载时包含这个文件,如下所示:
<script type="text/javascript" src="/../../Javascript/messages/messages.js"></script>
第一次加载页面时会调用该函数,但在调用ajax之后它不再被调用。我怀疑是因为它找不到message.js文件,所以我尝试再次将它包含在CListView定义中:
'baseScriptUrl'=>'/../../Javascript/messages/messages.js',
但现在我收到了这个错误:jQuery("#listMessages").yiiListView is not a function
...有什么想法吗?
解决方案
$this->widget('zii.widgets.CListView', array(
'dataProvider'=>$ligas,
'viewData'=>array('joinedArray'=>$joinedArray),
'template'=>"{items}", //template
'itemView'=>'_viewLiga',
'emptyText'=>'Usted todavia no se ha unido a ninguna liga',
'afterAjaxUpdate'=>'js:function(id, data) {myLigasListUpdated();}',
'enablePagination'=>false,
'id'=>'listViewMyLigas',
));
问题在于在ajax更新后必须调用的函数的签名。它必须像解决方案中所说的那样。谢谢@ jfriend00
答案 0 :(得分:1)
除非你去了一个新的页面或者去了一个看不到这些函数的不同范围,或者除非有什么东西破坏了脚本标记,否则永远不需要重新加载脚本文件来使用它中的函数。如果您仍然在同一页面上并且仍处于适当的范围内,那么功能仍然存在。您应该专注于函数不工作的原因,而不是第二次尝试加载脚本文件。
如果您可以向我们展示包含ajax调用的实际生成的javascript,我们可以帮助您找出第二次无效的原因。很多,更好地解决根本原因,而不是寻求重新加载的黑客工作。