我有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)); ?>
控制器基本上只是用Gii生成的默认actionIndex()
。
问题出现了:当我在页面加载后第一次单击Delete
链接时,它的行为与预期一致。之后,点击Delete
不会做任何事情。 (它会刷新ListView,但不会进行任何更改。)
我很确定问题在于Yii如何将click()
事件绑定到javascript中的链接,但我不知道如何修复它。我尝试过使用其他人建议的live=true
选项,但它没有做任何事情。
是否有人知道如何解决此问题,以便我的删除链接多次运行而无需重新加载页面?
答案 0 :(得分:2)
您的删除链接是否已刷新的项目列表?如果是这种情况,则在创建新链接时,脚本不会重新注册新链接。
两个选项:
1)确保您的链接未被刷新,并且是页面的永久性方面
2)编写自定义jQuery处理程序而不是使用Yii的ajaxLink。您需要使用.on和委派的事件。形式的东西:
$("#parentContainer").on("click", ".deleteLinkClass', updateItemList)
parentContainer
是页面上的永久项目,而deleteLinkClass
将是您需要分配给您正在使用的删除链接的类。
答案 1 :(得分:1)
CHtml::$liveEvents = false
,而我在故障排除阶段还处于早期阶段。
解决方案就是离开CHtml::$liveEvents = true
(默认)并确保所有链接都有唯一ID。