Yii CListview - >分页和AjaxLink / ajaxButton

时间:2012-03-08 10:32:35

标签: yii

我在分页和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无法正常工作,因为它不是由分页生成的。

任何想法?谢谢

4 个答案:

答案 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' => .....,