如何在CListView中调用ajax之后指定要包含的JS脚本

时间:2011-07-30 22:38:36

标签: javascript listview jquery yii

在调用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

1 个答案:

答案 0 :(得分:1)

除非你去了一个新的页面或者去了一个看不到这些函数的不同范围,或者除非有什么东西破坏了脚本标记,否则永远不需要重新加载脚本文件来使用它中的函数。如果您仍然在同一页面上并且仍处于适当的范围内,那么功能仍然存在。您应该专注于函数不工作的原因,而不是第二次尝试加载脚本文件。

如果您可以向我们展示包含ajax调用的实际生成的javascript,我们可以帮助您找出第二次无效的原因。很多,更好地解决根本原因,而不是寻求重新加载的黑客工作。