CGridView AjaxRequests支持javascript自定义CFormatter

时间:2013-07-30 07:53:54

标签: javascript ajax yii formatter cgridview

我遇到了CGridView和一个使用javascript的自定义Formatter的问题。当CGridView触发任何类型的ajax请求时,我使用javascript的Formatter停止工作。

让我们尝试一个简单的例子:

格式化程序

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代码停止工作,如何在CGridView Widget进行每次ajax调用后获取我的javascript代码?

感谢。

1 个答案:

答案 0 :(得分: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的<{1}}

<head>

/js/myCustomJS.js 创建新的JS文件:

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