2016-06-19 3 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()を再定義してそこに登録すると、このjは各呼び出し(フロントエンド)に適用されます。

拳をクリック(例えばページ番号付け)すると、1回目、2回目に2回呼び出されます。これがロジック全体を破ります。

私はそれをビューに登録するとうまくいくが、GridViewExtendedに登録したい。

助けてください。

+0

そして、何がポイントですか?すべてのタグでpjaxは各呼び出しでredifene \ rebindになります...私は何とか外部に登録する必要がありますが、gridviewモデルで登録する必要があります。 – user1954544

答えて

0

ajax呼び出しを検出し、それがajax呼び出しであればJSを登録しようとすることができます。

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

実際には$ this-> renderAjax()メソッドを使用してajaxのコンテンツをレンダリングすると解決されます。私が理解しているように、現在の(すでに読み込まれている)スクリプトを使用して、\ rebindアクションを再定義し、 "再起動"しません。