KirraBu
@KirraBu
Начинающий программист

Почему может некоректно работать пагинация в GridView загруженых через Ajax?

Часть представления с Tab панелями. Загружается содержимое скриптом.
<?php
$js = <<< 'SCRIPT'
$('[data-toggle="tab-ajax"]').click(function(e) {
    var $this = $(this),
        loadurl = $this.attr('href'),
        targ = $this.attr('data-target');

    $.get(loadurl, function(data) {
        $(targ).html(data);
    });

    $this.tab('show');

    return false;
});
SCRIPT;
$this->registerJs($js);
?>
<div class="nav-tabs-custom">
    <ul class="nav nav-tabs tabs-up">
        <li><?= Html::a('tab1', ['/site/tab1'], ['data-target' => '#tab1pane', 'data-toggle' => 'tab-ajax'])?></li>
        <li><?= Html::a('tab2', ['/site/tab2'], ['data-target' => '#tab2pane', 'data-toggle' => 'tab-ajax'])?></li>
    </ul>

    <div class="tab-content">
        <div class="tab-pane active" id="tab1pane"></div>
        <div class="tab-pane" id="tab2pane"></div>
    </div>

</div>


Загружаемое в таб представление
$dataProvider = new  ActiveDataProvider([
    'query' => Street::find(),
    'pagination' => ['pageSize' => 10, 'pageParam' => 'tab1content',],
]);

Pjax::begin(['enablePushState' => true]);
echo GridView::widget([
    'dataProvider' => $dataProvider,
    'options' => ['id'=>'tab1content'],
]);
Pjax::end();

загруженый GridView c пагинацией работает, но если переключиться на другой таб и обратно то пагинация уже не работает.
В чём может быть моя ошибка?
  • Вопрос задан
  • 294 просмотра
Пригласить эксперта
Ответы на вопрос 1
ShadowOfCasper
@ShadowOfCasper
Middle User Interface Web Developer
Это скорее всего потому что содержимое таба уходит в display: none, при переключении обратно - в display: block. При этом надо заново переинитить функцию, отвечающую за логику работы содержимого. На самом деле вместо этого я бы написал для содержимого таба на css класс-состояние (он кста у тебя есть), при котором ему не надо уходить в display: none. Например:
.tab-pane{
pointer-events: none;
opacity: 0;
&.active{
pointer-events: auto;
opacity: 1;
}
}

Тогда его значение в контексте дома со всеми параметрами будет сохраняться, а js перестанет его терять. Естественно вместо $this.tab('show'); нужно написать свои табы с манипуляцией классов.
Как пример (там есть много лишнего под адаптивную базу, но в той же директории можешь свериться с разметкой и забрать себе только нужное):
https://github.com/WebKieth/Black-UI/blob/master/s...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы