Yii ajaxLink()只能工作一次

时间:2012-08-14 15:48:50

标签: php ajax listview yii

我有CListViewajaxLink()文件中使用_view

查看(index.php)

<?php

Yii::app()->clientScript->registerScript('ajaxUpdate',
"
//javascript function to update the listview using ajax
function updateItemList(){
    $.fn.yiiListView.update('itemList');
    return false;
}

", CClientScript::POS_READY);

?>
<?php $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider,
    'itemView'=>'_view',
    'id'=>'itemList',

)); ?>

部分(_view.php)

<?php echo CHtml::ajaxLink('Delete',array('libdbitems/delete','id'=>$data->id),
                array('type'=>'POST','success'=>'function(){updateItemList()}'),
                array('confirm'=>'Are you sure you want to delete this item?',
                    'id'=>'delete-'.$data->id));  ?>

控制器基本上只是用Gii生成的默认actionIndex()

问题出现了:当我在页面加载后第一次单击Delete链接时,它的行为与预期一致。之后,点击Delete不会做任何事情。 (它会刷新ListView,但不会进行任何更改。)

我很确定问题在于Yii如何将click()事件绑定到javascript中的链接,但我不知道如何修复它。我尝试过使用其他人建议的live=true选项,但它没有做任何事情。

是否有人知道如何解决此问题,以便我的删除链接多次运行而无需重新加载页面?

2 个答案:

答案 0 :(得分:2)

您的删除链接是否已刷新的项目列表?如果是这种情况,则在创建新链接时,脚本不会重新注册新链接。

两个选项:

1)确保您的链接未被刷新,并且是页面的永久性方面

2)编写自定义jQuery处理程序而不是使用Yii的ajaxLink。您需要使用.on和委派的事件。形式的东西:

$("#parentContainer").on("click", ".deleteLinkClass', updateItemList)

parentContainer是页面上的永久项目,而deleteLinkClass将是您需要分配给您正在使用的删除链接的类。

答案 1 :(得分:1)

呃,一个愚蠢的修复。我意识到我不小心在我的控制器中留下了CHtml::$liveEvents = false,而我在故障排除阶段还处于早期阶段。

解决方案就是离开CHtml::$liveEvents = true(默认)并确保所有链接都有唯一ID。