0

我有个问题。我使用 ajax 评论添加,所以我需要更新列表视图。之后我需要选择列表视图的最后一页。

A 可以选择加载的最后一页,使用这个

$dataProvider = new CArrayDataProvider($model->comments);
$pager=$dataProvider->pagination;
$pager->itemCount=$dataProvider->totalItemCount;
if(!Yii::app()->request->isAjaxRequest)
   $pager->currentPage=$pager->pageCount;

我可以手动更新 clistview

$.fn.yiiListView.update("commentsList");

但是,我不能一起做这些事情:) 我还尝试将数据数组传递给 javascript 函数更新。所以,我需要使用 ajax 添加评论,然后我需要更新 clistview 并选择最后一页。任何想法,我该怎么做?

4

4 回答 4

2

作为一种解决方法,您可以click在寻呼机的“最后一页”按钮上触发一个事件。

$('#pagination li.last a').trigger('click');
于 2013-06-01T08:57:09.783 回答
1

经过几次尝试,我终于做出了想要的行为。这比我预期的要难,也许有更简单的方法,但我有我所拥有的。

所以,我用

div.keys

CListView 用于提供更新的 url 数据。

每次用户添加或删除评论时,我们调用更新方法

$.fn.yiiListView.update('commentsList');

这需要来自 div.keys 的标题属性。所以我决定在调用更新方法之前手动更改标题属性。我还需要有关总页码的信息,所以我将类添加到我的 commentsList

$this->widget('bootstrap.widgets.TbListView',array(
            'dataProvider'=>$dataProvider,
            'itemView'=>'/comment/_comment',
            'id'=>'commentsList',
            'htmlOptions' => array(
                "class"=>$pager->pageCount,
            ),
        ));

我编写了获取所有信息的函数

var getUrlInfo = function() {
    var divKeys = commentsBlock.find('div.keys'),
        keys = divKeys.attr('title'),
        currentPage = "",
        lastPage = parseInt (commentsBlock.find('#commentsList').attr('class')) +1, 
        temp = keys.lastIndexOf("page=") + 5,
        pageNumberIndex = temp;

    while ( !isNaN(parseInt(keys[temp])) ) {
            currentPage +=keys[temp];
            temp++;
    };

    return {'divKeys':divKeys, 'keys':keys, 'currentPage':currentPage,     'lastPage':lastPage, 'pageNumberIndex':pageNumberIndex};
};

之后,我设置规则来更改标题属性以添加评论 var urlInfo = getUrlInfo(); if (urlInfo.currentPage.length) { urlInfo.divKeys.attr('title', urlInfo.keys.slice(0,urlInfo.pageNumberIndex) + urlInfo.lastPage + urlInfo.keys.slice(urlInfo.pageNumberIndex + urlInfo.currentPage.长度) ); }

            else { 
                if (urlInfo.keys.indexOf('ajax')>0) 
                    {
                        urlInfo.divKeys.attr('title', urlInfo.keys + "&page=" + urlInfo.lastPage);
                    }
                else urlInfo.divKeys.attr('title', urlInfo.keys + "?page=" + urlInfo.lastPage);
            }

和删除评论功能

var urlInfo = getUrlInfo();

            if (!urlInfo.currentPage.length) { 
                console.log('da');
                if (urlInfo.keys.indexOf('ajax')>0) 
                    {
                        urlInfo.divKeys.attr('title', urlInfo.keys + "&page=" + urlInfo.lastPage);
                    }
                else urlInfo.divKeys.attr('title', urlInfo.keys + "?page=" + urlInfo.lastPage);
            }

我还为我的 view.php 设置了这个规则

if(!Yii::app()->request->getQuery('ajax') && !Yii::app()->request->getQuery('page')) {
            $pager->currentPage=$pager->pageCount;
        }
于 2013-06-02T15:19:11.300 回答
1

通过将参数附加到 $.fn.yiiListView.update 函数,找到了一个适合我的解决方案

JS部分:

 $.fn.yiiListView.update('switchlist-designer-clistview',{
                  data: $(this).serialize()+"&gotoLastPage=true",
                  complete:function(){
                    //Ajax loading is finished           
                  });

控制器中的 PHP 部分

if(Yii::app()->getRequest()->getParam("gotoLastPage")=="true"){
      //Important to unset the gotoLastPage Parameter otherwise the pagination wont work
       unset($_GET["gotoLastPage"]);

      //Get the last page 
      $lastPage = ceil($activeDataProvider->getTotalItemCount()/$activeDataProvider->getPagination()->pageSize);

      //Set the lastpage
      $paginator->currentPage=$lastPage;
      $activeDataProvider->setPagination($paginator);
  }
于 2014-09-26T07:54:36.217 回答
0

您还可以像这样更改 url 选项:

$.fn.yiiListView.update('productslistview', { 
    url: 'http://domain/search/controller?str=test&Controller_page=' + pageNumber + '&ajax=listview'
})

最后一页,您可以从 dataProvider 获取 php 端:

$dataProvider->getCount()
于 2015-02-10T18:57:41.450 回答