2016-06-19 6 views
0

GridView를 사용하여 새 GridViewExtended 클래스를 만들었습니다. 그런 다음 pjax 이벤트를 한 번만 등록해야합니다. 간단한 예제 ...Yii2, GridView, registerJs를 한 번만 바인딩하십시오.

<?php Pjax::begin(); ?> 
    <?= GridViewExtended::widget([]) 
    <?php Pjax::end(); ?> 
... 
<?php 
$this->registerJs(' 
    $(document).ready(function(){ 
     $("#w0").on("pjax:click", function() { 
      $("#w0 .box").append($("<div class=\"overlay\"><i class=\"fa fa-refresh fa-spin\"></i></div>")); 
     }); 

     $("#w0").on("pjax:complete", function(contents,options) { 
      $("#w0 .box .overlay").remove(); 
     }); 

     $("#w0 .box .overlay").remove(); 
    });' 
); 
?> 

그래서 js가 GridViewExtended 클래스에 등록 되었으면합니다. GridViewExtended :: run()을 재정의하고 거기에 등록하면이 js가 각 호출 (앞 부분)에 적용됩니다.

주먹 클릭 (예 : 페이지 매김)에서는 두 번째로 두 번 클릭하면됩니다 ... 그리고 이것은 전체 논리를 파열합니다.

보기에 등록하면 Ofcourse가 작동하지만 GridViewExtended에 등록하고 싶습니다.

도와주세요.

+0

그리고 요점은 무엇입니까? 모든 태그에서 pjax는 각 호출마다 redifene \ rebind가 될 것입니다 ... 어떻게 든 외부에 등록해야하지만 gridview 모델에 등록해야합니다. – user1954544

답변

0

아약스 호출을 감지하고 JS가 아약스 호출 인 경우 JS를 등록하려고 시도 할 수 있습니다. 액션 $ this-> renderAjax() 메소드에 AJAX 렌더링 콘텐츠 해결

if(!Yii::$app->request->isAjax) { 
    add your JS code here. 
} 
0

문제. 내가 이해 한대로 현재 (이미로드 된) 스크립트를 사용하여 \ rebind 작업을 다시 정의하고 "다시"실행하지 않습니다.