0

CGridView と、javascript を使用する 1 つのカスタム Formatter に問題があります。CGridView が任意の種類の ajax リクエストをトリガーすると、javascript で動作するフォーマッターが動作しなくなります。

簡単な例を 1 つ試してみましょう。

フォーマッター

class DFormatter extends CFormatter {

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

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

        return false;
    }
}

景色:

<?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',
         ),
       ),
  )); ?>

最初の Ajax リクエストの後、フォーマッタで使用されている JavaScript コードが機能しなくなります。

ありがとう。

4

1 に答える 1

1

スクリプトをフォーマッタに入れるべきではありません。

削除する:

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

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

グリッド ビューを構成します。

<?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/myCustomJS.jsに新しい JS ファイルを作成します。

function afterAjaxUpdate() {
    // do your formatting here
}
于 2013-07-30T08:18:14.500 に答える