2011-11-14 2 views
0

내 프로젝트에서 내 기본 창의 팝업에 cgridview 데이터를 채우는 중입니다. 하지만 아약스 페이지 매김을 시도하면 실패합니다. 나는 cgrid 데이터 만 가지고있는 목록 송장이라는 이름의 뷰를 만들었습니다.팝업 창 CgridView ajax 페이지 매김

보기/사용자/listInvoices.php 내 컨트롤러 난 송장을로드하기 위해 사용자의 컨트롤러에 요청을 보내 baseview.php에

에서

<div id="invoice_container" name="invoice_container"> 
<div align="right"><img src="<?php echo Yii::app()->request->baseUrl; ?>/media/images/add_button.png" name="add_invoice" id="add_invoice"></div> 
<?php 
echo "INVOICES LISTING"; 
// <a href="<?php #echo Yii::app()->createAbsoluteUrl('/studio/addInvoices') ">Add Invoice</a> 
//echo $schedules; 
?> 
<?php 
$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider' => $invoice->search($studioId), 
    'columns' => array(
     array(
      'name' => 'Invoice Number', 
      'type' => 'raw', 
      'value' => '$data->invoice_no', 
     ), 
     array(
     'name' => 'Student', 
     'type' => 'raw', 
     'value' => '$data->user_id', 
     ), 
     array(
      'name' => 'Invoice Date', 
      'type' => 'raw', 
      'value' => '$data->invoice_date', 
     ), 
     array(
      'name' => 'Invoice Amount', 
      'type' => 'raw', 
      'value' => '$data->invoice_amount', 
     ), 
     array(
      'name' => 'Status', 
      'type' => 'raw', 
      'value' => '$data->invoice_status', 
     ), 
    ), 
)); 
?> 
</div> 

. 데이터로 Ajax가 성공하면 송장 컨트롤러 그리드에 그리드가 채워집니다./baseview.php

$.ajax({ 
url:loadinvoice, 
success: function(data) { $('#invoice_controller).html(data);} 
}); 

usercontroller.php

public function actionLoadinvoice() { 
$this->renderPartial('listinvoices'); 
} 

하지만 내 사업부에서

보기/사용자는 그리드가 작동하지 않는 아약스 매김에 의해 채워됩니다. 다음 페이지를 클릭하면 브라우저가 다시로드됩니다. whats는 이것의 배후에있는 문제입니다. 나는 bind() 또는 .live()에서 ajax pagination 속성을 바인딩해야한다고 생각한다. 그러나 나는 그것을 어떻게 할 수 있습니다.

+0

내가 시도-ING 내 페이지에 아약스 목록보기를 전환 할 수있는 동일한 문제에 봉착 위해 그냥 평범한 아약스 options.See 다음과 같습니다. 예를 들어, $ this-> renderPartial ('listinvoices', null, false, true) // 마지막 param을 "true"로 설정하면 listview에 첨부 된 js를 처리하고 이벤트를 올바르게 바인딩합니다. 이 작업을 두 번하면 바인딩이 2 개 발생하며이를 피하는 방법을 모릅니다. – Samson

답변

0

안녕하세요, 아약스로 그리드보기를 업데이트하려면 자바 스크립트에서 $ .fn.yiiGridView.update (id, options) 함수를 사용해야합니다. ID는있는 gridview의 ID이며, 옵션은 전체 서명

/** 
    * Performs an AJAX-based update of the grid view contents. 
    * @param string the ID of the grid view container 
    * @param map the AJAX request options (see jQuery.ajax API manual). By default, 
    * the URL to be requested is the one that generates the current content of the grid view. 
    */ 
    $.fn.yiiGridView.update = function(id, options) { 
      var settings = $.fn.yiiGridView.settings[id]; 
      $('#'+id).addClass(settings.loadingClass); 
      options = $.extend({ 
        type: 'GET', 
        url: $.fn.yiiGridView.getUrl(id), 
        success: function(data,status) { 
          $.each(settings.ajaxUpdate, function() { 
            $('#'+this).html($(data).find('#'+this)); 
          }); 
          if(settings.afterAjaxUpdate != undefined) 
            settings.afterAjaxUpdate(id, data); 
          $('#'+id).removeClass(settings.loadingClass); 
        }, 
        error: function(XMLHttpRequest, textStatus, errorThrown) { 
          $('#'+id).removeClass(settings.loadingClass); 
          alert(XMLHttpRequest.responseText); 
        } 
      }, options || {}); 
      if(options.data!=undefined && options.type=='GET') { 
        options.url = $.param.querystring(options.url, options.data); 
        options.data = {}; 
      } 
      options.url = $.param.querystring(options.url, settings.ajaxVar+'='+id) 

      if(settings.beforeAjaxUpdate != undefined) 
        settings.beforeAjaxUpdate(id); 
      $.ajax(options); 
    };