2014-10-23 4 views
1

내 응용 프로그램에 CGridView가 포함 된 페이지가 있습니다. 사용자는 양식을 작성하고 제출 버튼을 클릭하여 데이터를 검색 할 수 있습니다. 검색 기능이 작동하고 CGridView가 성공적으로 업데이트되었습니다. 문제는 그것이 아약스를 통해 이루어질 수 없다는 것인데, Yii는 URL의 매개 변수를 통해이를 계속 수행합니다.Yii GridView Ajax 업데이트가 작동하지 않습니다.

CGridView를 아약스를 통해 업데이트하여보고 싶은 URL을 계속 표시하고 싶습니다. 여기 내 코드가있다.

파일보기

<?php 
Yii::app()->clientScript->registerScript('search', " 
    $('.btn-link').click(function(){ 
      $('.section').toggle(); 
      return false; 
    }); 

    $('.section form').submit(function(){ 
    $('#customer2-grid').yiiGridView('update', { 
     data: $(this).serialize() 
    }); 

    return false; 
    }); 
"); 
?> 

<?php echo CHtml::link('Advanced Search','#',array('class'=>'btn-link')); ?> 

<div class="section" style="display:none"> 
    <?php $this->renderPartial('_search',array(
     'model'=>$model, 
    )); ?> 
</div><!-- search-form --> 

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'customer2-grid', 
    'dataProvider'=>$model->search(), 
    'htmlOptions'=>array('style'=>'font-weight:bold'), 
    'filter'=>$model, 
    'columns'=>array(

     'NAME', 
     'BIRTHDATE', 
     'ADDRESS', 
     'EMAIL', 

     array(
      'header'=>'Action', 
         'class'=>'CButtonColumn', 
         'template' => '{add} {updates}', 
         'buttons' => array(
            'add' => array(
             'label' => '', 
             //'imageUrl' => Yii::app()->request->baseUrl.'/images/icon/add.png', 
             'url' => 'Yii::app()->createUrl("/goods/create/",array("id"=>$data->ID))', 
             'options'=>array('class'=>'btn btn-info', 'style'=> 'margin-bottom:2px '), 
             ), 

             'updates' => array(
              'label' => 'Update Profil', 
             // 'imageUrl' => Yii::app()->request->baseUrl.'/images/icon/update.png', 
              'url' => 'Yii::app()->createUrl("/customer/update/",array("id"=>$data->ID))', 
              'options'=>array('class'=>'btn btn-info'), 
             ),  


         ), 
     ), 
    ), 
)); 
?> 

여기 내 _search.php 코드가 잘

<div class="form-horizontal"> 

<?php $form=$this->beginWidget('CActiveForm', array(
    'action'=>Yii::app()->createUrl($this->route), 
    'method'=>'get', 
)); ?> 



    <div class="form-group"> 
     <?php echo $form->labelEx($model,'NAME',array('class'=>'col-sm-2 control-label')); ?> 
     <div class="col-sm-6"> 
      <?php echo $form->textField($model,'NAME',array('size'=>60,'maxlength'=>128,'class'=>'form-control')); ?> 
     </div> 
    </div> 

    <div class="form-group"> 
     <?php echo $form->labelEx($model,'BIRTHDATE',array('class'=>'col-sm-2 control-label')); ?> 
     <div class="col-sm-6"> 
      <?php echo $form->textField($model,'BIRTHDATE',array('class'=>'form-control')); ?> 
     </div> 
    </div> 

    <div class="form-group"> 
     <?php echo $form->labelEx($model,'ADDRESS',array('class'=>'col-sm-2 control-label')); ?> 
     <div class="col-sm-6"> 
      <?php echo $form->textField($model,'ADDRESS',array('size'=>60,'maxlength'=>512,'class'=>'form-control')); ?> 
     </div> 
    </div> 

    <div class="form-group"> 
     <?php echo $form->labelEx($model,'EMAIL',array('class'=>'col-sm-2 control-label')); ?> 
     <div class="col-sm-6"> 
      <?php echo $form->textField($model,'EMAIL',array('size'=>60,'maxlength'=>64,'class'=>'form-control')); ?> 
     </div> 
    </div> 

     <div class="form-group"> 
     <div class="col-sm-offset-2 col-sm-10"> 
     <?php echo CHtml::submitButton('Search', array('class'=>'btn btn-primary')); ?> 
     </div> 
    </div> 


<?php $this->endWidget(); ?> 

</div><!-- search-form --> 

여기 내 컨트롤러 코드의

public function actionAdmin() 
    {  
       $this->layout = '//layouts/column1'; 
     $model=new Customer('search'); 

     $model->unsetAttributes(); // clear any default values 
     if(isset($_GET['Customer'])) 
      $model->attributes=$_GET['Customer']; 

     $this->render('admin',array(
      'model'=>$model, 
     )); 
    } 

는 jQuery를에있는 토글 기능은 작품입니다하지만 업데이트 기능 작동하지 않습니다. CGridView의 정렬 함수도 작동합니다. 나는 여기서 무엇을 놓칠까요?

CSS에 jQuery/CGridView에 대한 제한 사항이 있습니까? 나는 CSS 선택기에 문제가있어 가정

편집 : 나는 예기치 않게 나는 3 개 자바 스크립트 파일을 포함했는데 그 중 하나가 오류의 원인 layout/main.php 에 자리 잡고 문제를 발견했습니다 .

<!-- JAVASCRIPTS --> 
    <!-- Placed at the end of the document so the pages load faster --> 
    <!-- JQUERY --> 
    <script src="<?php echo Yii::app()->request->baseUrl; ?>/css/default/js/jquery/jquery-2.0.3.min.js"></script> 
    <!-- JQUERY UI--> 
    <script src="<?php echo Yii::app()->request->baseUrl; ?>/css/default/js/jquery-ui-1.10.3.custom/js/jquery-ui-1.10.3.custom.min.js"></script> 
    <!-- BOOTSTRAP --> 
    <script src="<?php echo Yii::app()->request->baseUrl; ?>/css/default/bootstrap-dist/js/bootstrap.min.js"></script> 

첫 번째 스크립트를 삭제 한 후에도 문제가 없습니다. 그러나, 나는 이유를 모른다. 어쩌면 누군가가 왜 그런지 설명 할 수 있습니다. 모든 설명을 부탁드립니다. 표준 GII 모듈 죄송합니다

+0

로 확장 검색 도구를 갖고 싶어 물론, 사용자 정의 검색 양식을 지정하여 기존 솔루션을 발명 할 필요가 없다? – Panoptik

+0

필터 속성도 작동하지 않습니다. 나는 이유를 모른다. 이것은 모델과 관련이 있습니까? – MCRmy

+0

필터 속성을 모델 으로 지정해야합니다. 'filter'=> $ model, – Panoptik

답변

1

내가

기본 GII의 침전물 발생기 exampling이 코드는 일반적인 솔루션을 설명하려고 확인 주제의 외출이 질문은

이 허락한다면 당신이 모델 Customer.php의 generetad

다음
class Customer extends CActiveRecord 
{ 
    // ... 

    public function search() { 
     return new CActiveDataProvider(
      // provider properties 
      'criteria' => new CDbCriteria(), // searches and filters 
      'sort' => new CSort(), // ordering 
      'pagination' => new CPagination(), // pagging 
     ); 
    } 

    // also there are exists rules for search scneario 

    public function rules() { 
     return array(
      // ... some other rules 

      // rule for scenario search 
      array('NAME, BIRTHDATE,ADDRESS, EMAIL', 'safe', 'on'=>'search'), 
     ); 
    } 

    // ... 
} 

우리가 원시 컨트롤러를 설명해야

class CustomerController extends CController 
{ 
    public function actionIndex() 
    { 
     // create model with scenario search 
     $model = new Customer('search'); 

     // check for incoming filter requests and apply filter 
     if(isset($_GET['Customer']) { 
      $model->attributes = $_GET['Customer']; 
     } 

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

이제 기본 CGridView 설정으로 가장 간단한보기를 만들어야합니다.

<?php $this->widget('zii.widgets.grid.CGridView', array(
      'provider' => $model->search(), 
      // this property automatically add search field above each columns 
      'filter' => $model, 

    )); 

이 코드를 사용해보십시오. 당신은, 당신은 당신이 CGridView의 필터 속성을 사용하지 않은 이유는 일부 하드 codding

+0

고마워요. 해결책은 아니지만 코드를 작성하고 다시 작성한 후에는 문제 – MCRmy