Pjax перезагружает страницу в поиске gridview на Yii2 - PullRequest
0 голосов
/ 19 марта 2019

Я загружаю gridview внутри страницы с помощью запроса ajax.Затем, после загрузки страницы, я хочу разрешить пользователю упорядочивать и выполнять поиск в обычном режиме с gridview, очевидно, не перезагружая страницу.

Пока работает сортировка, поиск перезагружает страницу (и, поскольку действие загружаетсясодержимое ajax отличается от текущего, когда страница полностью изменяется).Я знаю, что Pjax перезагружает всю страницу после значения тайм-аута, но это не проблема, так как я перешел на действительно высокое значение и все еще получаю перезагрузку.

Кроме того, это единственный pjax на странице.

В чем может быть проблема?

Это код для представления с видом сетки

    <?php Pjax::begin([
        "id" => "associates-ajax-list",
        "enablePushState" => FALSE,
        "enableReplaceState" => FALSE,
        "timeout" => 5000,
    ]); ?>

    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'name',
            'surname',

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

Это код действия ajax

public function actionAssociatesList($id) {
    $searchModel = new \app\models\AssociateSearch();
    $searchModel->associates_for = $id;
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    if (Yii::$app->request->isAjax) {
        return $this->renderAjax('associates_list', [
                    'searchModel' => $searchModel,
                    'dataProvider' => $dataProvider,
        ]);
    } else {
        return $this->render('associates_list', [
                    'searchModel' => $searchModel,
                    'dataProvider' => $dataProvider,
        ]);
    }
}

Страница, на которую загружается это содержимое, является страницей стандартного просмотра, созданной с помощью Gii

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Проблема была в виде сетки. Вам необходимо указать идентификатор. Самое смешное, что это сеточное представление было единственным, сгенерированным для этой страницы, поэтому, очевидно, не было никакого конфликта.

<?= GridView::widget([
        'id' => "grid-view-name",
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
0 голосов
/ 19 марта 2019

Можете ли вы попробовать добавить этот скрипт в представление?

<?php
    $this->registerJs(
       '$("document").ready(function(){ 
            $("#associates-ajax-list").on("pjax:end", function() {
                $.pjax.reload({container:"#associates-ajax-list"});  //Reload GridView
            });
        });'
    );
?>

Возможно, вам придется изменить некоторые селекторы, так как я не знаю, как выглядит HTML в вашем проекте.

И вам может понадобиться JS для предотвращения действия отправки по умолчанию, если поля поиска находятся в <form>.Если нет, форма будет отправлена ​​до того, как может сработать PJAX.

...