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
],
];
}