1

我有一个在文件CListView中使用的。ajaxLink()_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));  ?>

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

Delete这是问题所在:当我在页面加载后第一次单击我的链接时,它的行为符合预期。之后,单击Delete什么也不做。(它会刷新 ListView,但没有进行任何更改。)

我很确定问题在于 Yii 如何将click()事件绑定到我在 javascript 中的链接,但我不知道如何解决它。我已尝试live=true按照其他人的建议使用该选项,但它什么也没做。

有谁知道如何解决此问题,以便我的删除链接可以多次工作而无需重新加载页面?

4

2 回答 2

2

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

两种选择:

1)确保您的链接没有被刷新,并且是页面的一个永久方面

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

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

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

于 2012-08-14T16:15:23.767 回答
1

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

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

于 2012-08-14T21:22:44.170 回答