在yii中删除记录时更新CListView

时间:2014-01-14 12:28:02

标签: yii

我正在使用yii,我希望在从中删除产品后更新我的clistview。 这是 clistview小部件代码

<?php $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider,
        'viewData'=>array('exhibitorId'=>$exhibitorId),
        'id'=>'productView',
    'itemView'=>'_productView',
        'sortableAttributes'=>array(
        'productName',
        'productType',
        'productBrand',
        'description'
    )
)); ?>

这是 _productView

<b><?php echo CHtml::encode(Products::model()->getAttributeLabel('creationDate')); ?>:</b>
    <?php echo CHtml::encode($data['creationDate']); ?>
    <br />

    <b><?php echo CHtml::encode(Products::model()->getAttributeLabel('updatedBy')); ?>:</b>
    <?php echo CHtml::encode($data['updatedBy']); ?>
    <br />
<?php echo CHtml::ajaxLink('Delete', array('deleteMyThisProduct', 'product'=>$data['productId'],'exhibitor'=>$exhibitorId),
                array(
                    "beforeSend" => 'js:function(){if(confirm("Are you sure you want to delete?"))return true;}',
                    "success"=>'js:function(data){'
                    . '$.fn.yiiListView.update("productView");'
                    . '}',
                    "type"=>'post',

                    )); ?>

这是ajax链接转到

的操作
public function actionDeleteMyThisProduct($product,$exhibitor)
        {
            if(Yii::app()->request->isAjaxRequest)
            {
            $productId=(int)$product;
            $exhibitorId=(int)$exhibitor;
            if($productId !== 0 && $exhibitorId !== 0)
            {
            $deleteProduct=  Exhibitorproducts::model()->loadRecordsByexhibitorIdAndProductId($exhibitorId, $productId);
            ProductPhotos::model()->deleteAllPhotosByExhibitorIdAndProductId($exhibitorId, $productId);
            if(!empty($deleteProduct))
            {   
                $deleteProduct->delete();
            }
            }
            }

        }

问题: - 现在的问题是,我第一次从clistview中删除产品。它可以很好地删除产品并更新列表。但在那之后,当我点击下一个产品的删除链接时,它什么也没做。那我怎么能克服这个问题呢?

1 个答案:

答案 0 :(得分:3)

问题是,当整个页面加载时,您的事件会附加到<a>标记,并且在ajax刷新后没有附加任何事件。

在您的产品视图中,使用<span>标记整理整个内容:

<span class="product" data-product-id="<?php echo $data['productId']; ?>"> .... </span>

将您的脚本更改为以下内容:

$('#productView').on('click','.product', function(e){
   var $target = $(e.target);
   e.preventDefault();
   $.post('<?php echo Yii::app()->createUrl('deleteMyThisProduct') ?>', {'product': $target.data('product-id')}).
   done(function(){
       $.fn.yiiListView.update("productView");
   })

})