我正在使用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中删除产品。它可以很好地删除产品并更新列表。但在那之后,当我点击下一个产品的删除链接时,它什么也没做。那我怎么能克服这个问题呢?
答案 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");
})
})