Pjax перезагружает страницу или не работает вовсе при использовании фильтра GridView в модальном окне

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
i-programmer
Сообщения: 101
Зарегистрирован: 2015.08.24, 18:50

Pjax перезагружает страницу или не работает вовсе при использовании фильтра GridView в модальном окне

Сообщение i-programmer »

Есть страница, которая подгружается через `ajax`:


Код: Выделить всё

    $.get('/test/show-window', {params: params}, response => {
    	if (response.error) {
    		bootbox.alert(response.error.message);
    
    		return false;
    	}
    
    	let modal = $('#my-modal');
    	modal.find('.modal-body').html(response);
    	modal.modal('show');
    });
В нём есть простой код:

Код: Выделить всё

    <?php
    	Pjax::begin([
    			'id' => 'pjax-1',
    			'enablePushState'=>false,
    			'enableReplaceState' => false,
    			'options' => ['data-request-url' => Yii::$app->request->url]
    	]);
    	
    	$gridColumns = ['name'];
    
    	echo GridView::widget([
    		'id' => 'grid-view-1',
    		'dataProvider' => $dataProvider,
    		'columns' => $gridColumns,
    		'filterModel' => $searchModel,
    		'summary' => '',
    	]);
    	
    	 Pjax::end();
     ?>
В итоге при вводе чего-либо в поле фильтра, происходит редирект на ту же страницу (в параметрах запроса отсутствует указание контейнера почему-то) или вовсе не работает. При этом сортировка и пагинация отрабатывает корректно (видимо из-за наличия ссылок в них....Но если `Gridview` располагать не в модальном окне, то у него фильтры работают же). Почему так происходит и как лечить?
  1. Метод возвращает только `html`. Не редирект.
  2. Timeout прописывал и бесконечный в том числе.
  3. Идентификаторы `Pjax` и `GridView` - разные
  4. При этом сортировка работает нормально
  5. Пробовал и такое триггерить в самом начале

    Код: Выделить всё

    	let reloadPjax = function(url, container) {
    			$.pjax.reload({
    				url: url,
    				container: container,
    				data       : {},
    				push       : false,
    				replace    : false,
    				type : 'GET'
    			});
    		};


----

Так же в окне может быть вот такая конструкция:

Код: Выделить всё

    <?php $form = ActiveForm::begin([
    	'id' => 'add-form',
    	'options' => [
    		'class' => 'add-node-form',
    		'data-pjax' => 1
    	],
    	'action' => '/test/add?type=testElement'
    ]); ?>
    
    <?= $form->field($model, 'id')->hiddenInput()->label(false); ?>
    <?= $form->field($model, 'type_id')->dropDownList($types); ?>
    
    <?php
    	Pjax::begin([
    			'id' => 'pjax-1',
    			'enablePushState'=>false,
    			'enableReplaceState' => false,
    			'options' => ['data-request-url' => Yii::$app->request->url]
    	]);
    	
    	$gridColumns = ['name'];
    
    	echo GridView::widget([
    		'id' => 'grid-view-1',
    		'dataProvider' => $dataProvider,
    		'columns' => $gridColumns,
    		'filterModel' => $searchModel,
    		'summary' => '',
    	]);
    	
    	 Pjax::end();
    ?>
    
    
    <?= Html::submitButton('Добавить', ['class' => 'btn btn-primary add-node-btn form-save-btn', 'id' => 'add-element']) ?>
    <?php ActiveForm::end(); ?>
Ответить