2013-07-30 3 views
0

CGridView 및 javascript를 사용하는 하나의 사용자 정의 포매터에 문제가 있습니다. CGridView가 어떤 종류의 Ajax 요청을 트리거 할 때 javascript와 작동하는 Formatter는 작동을 멈춘다.CGridView AjaxRequests가 자바 스크립트 사용자 정의 CFormatter를 깨습니다.

의 하나의 사소한 예를 봅시다 :

class DFormatter extends CFormatter { 

    public function formatTest(){ 
     $js  = <<<EOD 
     console.log("test"); 
     EOD; 

     $cs = Yii::app()->getClientScript(); 
     $cs->registerScript("testjs", $js); 

     return false; 
    } 
} 

포매터 : 첫 번째 Ajax 요청 후

<?php $this->widget('zii.widgets.grid.CGridView', 
    array(
     'id'   => 'development-grid', 
     'dataProvider' => $model->search(), 
     'filter'  => $model, 
     'columns'  => array(
     'id', 
     array(
      'name' => 'testField', 
      'type' => 'test', 
     ), 
     array(
      'class' => 'CButtonColumn', 
     ), 
     ), 
)); ?> 

이 포맷터에서 사용되는 자바 스크립트 코드가 작동을 멈 춥니 다, 어떻게 CGridView 위젯으로 만든 모든 아약스 호출 후에 자바 스크립트 코드를 사용할 수 있습니까?

감사합니다.

답변

1

포맷터에 스크립트를 넣지 마십시오.

제거 :

<?php $this->widget('zii.widgets.grid.CGridView', array(
    //.. other options 

    // ADD THIS 
    'afterAjaxUpdate' => 'function() { afterAjaxUpdate(); }', 

/layouts/main.php<head>에 추가 :

<script src="<?= Yii::app()->getBaseUrl(true); ?>/js/myCustomJS.js"></script> 

것은에서 새로운 JS 파일을 만듭니다

$js  = <<<EOD 
    console.log("test"); 
    EOD; 

    $cs = Yii::app()->getClientScript(); 
    $cs->registerScript("testjs", $js); 

는 그리드보기를 구성 /js/myCustomJS.js :

function afterAjaxUpdate() { 
    // do your formatting here 
} 
+0

왜 안 되니? Jacvascript와 CSS는 프리젠 테이션에 사용되며 포맷터는 프리젠 테이션 클래스가 아닙니다. – user1648170

+0

아니요, HTML 태그로 출력을 래핑하는 등 구조적인 마크 업에 포맷터를 사용해야합니다. HTML 태그는 클라이언트에서 CSS로 스타일을 지정합니다. 그리드가 로딩을 마칠 때마다 자바 스크립트를 실행하려면이 방법을 사용하는 것이 좋습니다. –

관련 문제