我在分页和Ajax表单方面遇到了问题。
以下是Controller
的代码:
$dataProvider = new CActiveDataProvider('User', array(
'pagination'=>array(
'pageSize'=>10,
),
));
$this->render('users',array(
'dataProvider'=>$dataProvider,
));
视图 - >用户:
$this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_user',
);
对于渲染_users:
echo CHtml::ajaxLink($text, $this->createUrl('admin/deleteuser',array('id'=>$data->iduser)), array('success'=>"js:function(html){ alert('remove') }"), array('confirm'=>_t('Are you sure you want to delete this user?'), 'class'=>'delete-icon','id'=>'x'.$viewid));
如果我在数据库中有15行,它将只显示10并且将为下一个5生成一个分页(ajaxUpdate = true)。前10行对ajaxLink没有问题,因为生成了clientscript但问题是什么时候我转到下一页,ajaxLink无法正常工作,因为它不是由分页生成的。
任何想法?谢谢
答案 0 :(得分:1)
另一种方法,请检查此post in the yii forum。所以你的代码会变成这样:
echo CHtml::link($text,
$this->createUrl('admin/deleteuser',array('id'=>$data->iduser)),
array(// for htmlOptions
'onclick'=>' {'.CHtml::ajax( array(
'beforeSend'=>'js:function(){if(confirm("Are you sure you want to delete?"))return true;else return false;}',
'success'=>"js:function(html){ alert('removed'); }")).
'return false;}',// returning false prevents the default navigation to another url on a new page
'class'=>'delete-icon',
'id'=>'x'.$viewid)
);
您的确认已移至jquery的ajax
函数的beforeSend
回调。如果我们从false
返回beforeSend
,则不会发生ajax调用。
另一个建议是,你应该使用post
个变量而不是get
,如果可以,也可以在索引视图中将ajax调用移动到function
,并且只包括调用所有链接'onclick
事件的功能。
希望这有帮助。
答案 1 :(得分:0)
不完全确定,但鉴于过去的经验,我认为问题出在listview小部件本身。
如果窗口小部件的所有者是Controller,则它使用renderPartial呈现项目视图。 正如您可能知道或不知道的那样,Renderpartial具有“processOutput”参数,对于大多数AJAX魔法(默认情况下为FALSE),该参数需要设置为TRUE。
所以也许你可以尝试只派生一个listview类并在其中添加一个“renderItems()”的副本。在那里你必须改变它,以便它使用正确的参数调用renderPartial。
答案 2 :(得分:0)
在小部件Clistview中,我添加了afterAjaxUpdate
$jsfunction = <<< EOS
js:function(){
$('.delete-icon').live('click',function(){
if(confirm('Are you sure you want to delete?'))
{
deleteUrl = $(this).attr('data-href');
jQuery.ajax({'success':function(html){ },'url':deleteUrl,'cache':false});
return false;
}
else
return false;
});
}
EOS;
$this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'id'=>'subscriptionDiv',
'itemView'=>'_subscription',
'afterAjaxUpdate'=>$jsfunction,
'viewData'=>array('is_user'=>$is_user,'all'=>$all),
'htmlOptions'=>($dataProvider->getData()) ? array('class'=>'table') : array('class'=>'table center'),
)
);
并在_user中添加了属性data-href
<?php echo CHtml::ajaxLink($text, $this->createUrl('admin/deletesubscription',array('id'=>$data->idsubscription)),
array('success'=>"js:function(html){ $('#tr{$viewid}').remove(); }"),
array('confirm'=>_t('Are you sure you want to unsubscribe?'),
'class'=>'delete-icon',
'id'=>'x'.$viewid,
'data-href'=>$this->createUrl('admin/deletesubscription',array('id'=>$data->idsubscription))
)); ?>
答案 3 :(得分:0)
试
$this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_user',
'enablePagination' => true,
);
如果这还没有解决,请尝试将数据提供商选项中的记录总数包括在内 -
'itemCount' => .....,