Yii2 Pjax внутри ListView не работает

Я пытался решить эту проблему в эти несколько дней, в основном, я пытаюсь получать комментарии и комментарии детей, в комментарии есть кнопка / ссылка под названием "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);
    ?>

И я продолжаю получать предупреждение не удалось загрузить страницу.

Заголовок ответа: URL запроса: http://localhost/startUp/thread/index?id=1&comment_id=1&_pjax=%23childCommentData-1 Метод запроса:GET Код состояния:500 Внутренняя ошибка сервера Удаленный адрес:[::1]:80 Заголовки ответа просмотреть исходные данные Соединение: закрыть Длина содержимого:1387 Тип содержимого:text/html; charset=UTF-8 Дата: вторник, 29 декабря 2015 г. 12:02:18 GMT Сервер:Apache/2.4.9 (Win64) PHP/5.5.12 X-Powered-By:PHP/5.5.12 Запрос заголовков представления источника Примите: text / html, /; q = 0,01 Accept-Encoding:gzip, deflate, sdch Accept-Language:en-US,en;q=0,8 Соединение:keep-alive Тип содержимого:application/x-www-form-urlencoded; кодировка = UTF-8

Хост: localhost Реферер: http://localhost/startUp/thread/index?id=1 Пользователь-агент: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-Requested-With:XMLHttpRequest строка запрос Параметры просмотр для просмотра исходного кода URL закодированного идентификатора:1 comment_id:1 _pjax:#childCommentData-1

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 для автоматической генерации этого заголовка 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
        ],
    ];
}
Другие вопросы по тегам