【问题标题】:Yii ajaxLink() only works onceYii ajaxLink() 只工作一次
【发布时间】:2012-08-14 15:48:49
【问题描述】:

我有一个CListView_view 文件中使用ajaxLink()

查看(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 选项,但它什么也没做。

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

【问题讨论】:

    标签: php ajax listview yii


    【解决方案1】:

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

    两种选择:

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

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

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

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

    【讨论】:

    • 好建议,编写自定义处理程序会很有效。幸运的是,我修复了代码中的一个愚蠢错误。还是投了你一票。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-06
      • 2018-06-22
      • 2015-09-18
      相关资源
      最近更新 更多