2014-03-02 76 views
2

我想用下拉菜單來改變listview的頁面大小。請幫我找到解決辦法。 我已閱讀了很多文章,但無法做到這一點。你可以找到我在哪裏犯錯update yii listview onchange of dropdown

我使用下面的代碼。爲的index.php(視圖)

代碼下拉列表

代碼

<?php echo CHtml::beginForm(); ?> 
      <?php echo CHtml::dropDownList('CategoryMst_pagesize','20', 
        array('10'=>'10','20'=>'20','50'=>'50','100'=>'100' 
        ), 
        array('class'=>'form-control', 
        /*'ajax'=>array(
         'type'=>'GET', 
         'data'=>array('pagesize'=>'js:this.value'), 
         'ajaxUpdate':() 
        ),*/ 
       )); 
      ?> 
      <?php echo CHtml::endForm(); ?> 

爲列表視圖代碼

<?php $this->widget('zii.widgets.CListView',array(
      'id'=>'category_list', 
      'dataProvider'=>$dataProvider, 
      'itemView'=>'_view', 
      'summaryText'=>'{start} - {end} of {count} results',     
     )); 
?> 



    <?php 
    Yii::app()->clientScript->registerScript('category_update', 
     "$('#CategoryMst_pagesize').change(function(){ 
       $.fn.yiiListView.update('category_list', { 
        data: $(this).serialize(), 
       } 
     ); 
     }); 
     return false;", 
    CClientScript::POS_READY); 
?> 

在cotroller代碼

 public function actionIndex($pagesize=20) 
{ 
    $dataProvider=new CActiveDataProvider('CategoryMst',array(
       'criteria'=>array(
       ), 
       'pagination'=>array(
        'pageSize'=>$pagesize, 
       ), 
      )); 

    $this->render('index',array('dataProvider'=>$dataProvider));   
} 

回答

1

您確實不應該使用$('#CategoryMst_pagesize').change改爲使用https://api.jquery.com/on/

然後從我看到的你不記得任何地方的頁面大小,當你改變它一次後,只要你去另一個頁面,它會回到你以前的樣子。這是我該怎麼做:
1)首先使用一些東西來記住頁面大小,因爲現在你不知道。我個人推薦這款http://www.yiiframework.com/extension/esaverelatedbehavior/,因爲它真的非常好。它還記得你的過濾器(無價)。 2)爲您的控制器創建一個只保存頁面大小的函數。

/** 
* Saves the new page size for this particular model 
*/ 
public function actionPageSize($pagesize) 
{ 
    \Yii::app()->user->setState($this->modelName() . '_pagesize', $pagesize); 
} 

3)創建頁面大小的下拉菜單,我使用Select 2,但可以使用正常的下拉菜單。同樣的想法

<?php $this->widget('MySelect2', array(
     'name' => 'pageSize', 
     'data'=>array('10' => '10', '25' => '25', '50' => '50', '100' => '100'), 
     'options'=>array('allowClear' => false, 'minimumResultsForSearch' => 30), 
     'htmlOptions' => array(
      'data-ajax-dropdown' => $this->createUrl('pageSize'), 
      'style' => 'width: 80px', 
      'options'=>array(
       (Yii::app()->user->getState($this->modelName() . '_pagesize', Yii::app()->params['defaultPageSize']))=>array('selected'=>'selected') 
    ))));?> 

4)我自動提交的下拉菜單的頁面大小像你一樣,但是我提交給上面的函數沒有索引頁

/*========================== 
AUTOSUBMIT DROPDOWNS FOR THE PAGE SIZE 
==========================*/ 
$('#pageSize').live('change',function(e){ 
    var element = $(this); 
    jQuery.ajax({ 
     "type": "GET", 
     "url": $(this).attr("data-ajax-dropdown"), 
     "cache": false, 
     "data":{pagesize: $(this).val()} 
    }) 
    .success(function (response) { 
     $.fn.yiiGridView.update(element.closest('.widget.table').find('div.grid-view').attr('id')); 
     $.jGrowl("Pagination changed", { life: 2000 }); 
    });  
}); 

PS:我知道我不應該使用.live

5)在搜索模型就像你做我有

return new \CActiveDataProvider($this, array(
    'criteria'=>$criteria, 
    'sort'=>array(
     'defaultOrder'=>$this->getTableAlias(false,false) . '.name asc', 
    ), 
    'pagination'=>array(
     'pageSize'=> \Yii::app()->user->getState(get_class($this) . '_pagesize', \Yii::app()->params['defaultPageSize']), 
    ),     
)); 
+0

哎thakns您的回覆....但其實我很高興我的代碼是有效的....包括jquery.min文件中的問題...它包含兩次...因此我不能使用JavaScript調用操作。再次感謝 – user3177586

+0

確保你使用registercorescript包含jquery,這應該阻止它被包含2次。 –

+0

是的,我已經包含文件直接使用

相關問題