ListView中的Yii2 Pjax无法正常工作

时间:2015-12-29 16:40:23

标签: yii2 pjax

我这几天一直试图解决这个问题,基本上我想尝试commetn和child评论,评论有一个名为'retrievecomment'的按钮/链接来检索子评论。

我发现pjax无法正常工作,它会让整个页面更新。

编辑:下面的代码在_list_comment.php里面,_ list_comment.php在index.php里面是ListView,所以_list_comment.php将被调用几次取决于项目数

    <div class="row">   
            <?= $model['comment']?>
    </div>


    <?php Pjax::begin([
            'id' => 'childCommentData-'.$comment_id,
            'timeout' => 5000,
            'clientOptions'=>[
                    'container' => '#childCommentData-' . $comment_id,

                    'linkSelector'=>'#retrieveComment'.$comment_id
                    ]
            ]);?>
            <div  class="row">

                <div id="selector"align="right">
                <?= Html::a('Retrieve Comment', ["../../thread/index?id=" . $model['thread_id'] . "&comment_id=" . $comment_id], 
                                            ['data-pjax' => '#childCommentData-'.$comment_id, 'class' => 'btn btn-default'
                                            ,'id' => 'retrieveComment' . $comment_id]) ?>
                </div>
                <div  class="col-md-12">

                    <?php if(isset($retrieveChildData)){ ?>
                        <?= ListView::widget([

                                'dataProvider' => $retrieveChildData,
                                'options' => [
                                    'tag' => 'div',
                                    'class' => 'list-wrapper',
                                        'id' => 'list-wrapper',
                                ],
                                    'layout' => "\n{items}\n{pager}",

                                'itemView' => function ($model, $key, $index, $widget) {
                                    return $this->render('_list_child_comment',['model' => $model]);
                                }, 
                                'pager' => [
                                    'firstPageLabel' => 'first',
                                    'lastPageLabel' => 'last',
                                    'nextPageLabel' => 'next',
                                    'prevPageLabel' => 'previous',
                                    'maxButtonCount' => 3,
                                ],
                            ]) ?>

                    <?php } ?>


                </div>
        </div>
        <?php Pjax::end();?>

</div>

错误说“模型未定义”,这是pjax的外部空间。这就是我认为整个页面被刷新的原因

我还把它放在java脚本代码中

           <?php  $this->registerJsFile(Yii::$app->request->baseUrl.'/js/list_comment.js');
        $script =<<< JS
    $(document).pjax('retrieveComment' + $comment_id, '#childCommentData-' + $comment_id, { fragment: '#childCommentData-' + $comment_id });

    $('#childCommentData-' + $comment_id ).on('pjax:error', function (event) {
                                alert('Failed to load the page');
                                event.preventDefault();
                            });
    JS;
        $this->registerJs($script);
    ?>

我一直收到警告无法加载页面。

响应标题: 请求网址:http://localhost/startUp/thread/index?id=1&comment_id=1&_pjax=%23childCommentData-1 请求方法:GET 状态代码:500内部服务器错误 远程地址:[:: 1]:80 响应标题 查看源 连接:关闭 内容长度:1387 内容类型:text / html的;字符集= UTF-8 日期:2015年12月29日星期二12:02:18 GMT 服务器:Apache / 2.4.9(Win64)PHP / 5.5.12 X-已启动方式:PHP / 5.5.12 请求标题 查看源 接受:text / html, / ; Q = 0.01 Accept-Encoding:gzip,deflate,sdch 接受语言:EN-US,EN; Q = 0.8 连接:保持活跃 内容类型:应用/ X WWW的窗体-urlencoded;字符集= UTF-8

主机:本地主机 引用者:http://localhost/startUp/thread/index?id=1 User-Agent:Mozilla / 5.0(Windows NT 6.3; WOW64)AppleWebKit / 537.36(KHTML,类似Gecko)Chrome / 47.0.2526.106 Safari / 537.36 X-CSRF令牌:UkwwSXdGUE4gO2MdRCMBDDENRBMkMykHGQ9XeB4uYTlnHGECGgkbPQ == X-PJAX:真 X-PJAX容器:#childCommentData-1 X-要求 - 由于:XMLHttpRequest的 查询字符串参数 查看源 查看URL编码 ID:1 COMMENT_ID:1 _pjax:#childCommentData-1

1 个答案:

答案 0 :(得分:0)

这很糟糕:

<?= Html::a('Retrieve Comment', ["../../thread/index?id=" . 
     $model['thread_id']. "&comment_id=" . $comment_id], 
     ['data-pjax' => '#childCommentData-'.$comment_id, 'class' => 'btn btn default','id' => 'retrieveComment' . $comment_id]) 
?>

方法是:

<?php
    $url = Html::a('Retrieve Comment', ["/module/controller/index",[
        "id"=> $model['thread_id'], 
        "comment" => $model["comment"]
    ]); 
    echo $url;
?>

在控制器/操作中,您可以添加pjax标头以生成url:

Yii::$app->response->headers->set('X-PJAX-URL', Url::toRoute(["/module/controller/action", "id" => $model->id , 'comment'=> $comment->id]) );

我向yii写了一个behaivor,以自动生成此标头X-PAJAX-URL: https://github.com/yiiforces/yii2-pjax-url-behavior

在/ controller / action中使用时,仅将其添加到控制器行为中

public function behaviors()
{
    return [
        'pjax-url' => [
            'class'   => 'yiiforces\pjaxUrlBehaivor\PjaxUrlBehaivor',
            'actions' => ['index'],
            'extraParams' => ['extra', 'lorem ipsum'] // incluse you can add more params to url
        ],
    ];
}