Skip to content

Три ListView на странице #7

@panchenkodv

Description

@panchenkodv

Привет. Возникла проблемка. Если на странице 3 ListView, то скролпейджер работает только для последнего. Там у каждого есть кнопка для подгрузки товаров.

Вот код для вьюшек

echo \yii\widgets\ListView::widget([
'dataProvider' => $dataProvider,
'itemView' => function($model) use (&$helper){
$helper->recalc($model, ['except' => ['DocumentSum']]);

    return $this->render('../_shop_item', [
        'model'     =>  $model,
        'btnClass'  =>  'mini-button',
        'innerSub'  =>  false
    ]);
},
'options'       =>  [
    'class' =>  'list-view '. $dataProvider->pagination->params['type']
],
'itemOptions'	=>	[
    'class'	=>	'hovered'
],
'layout'        =>  Html::tag('div', '{items}'.
        Html::tag('div',
            Html::tag('span', \Yii::t('shop', 'Еще товары')),
            [
                'class' => 'ias-trigger'
            ]
        ),
        [
            'class' => 'items-grid clear-fix',
        ]
    ).
    '{pager}',
'pager'         =>  [
    'class'                 =>  InfiniteScrollPager::className(),
    'options'           =>  [
        'class' =>  'pagination hidden'
    ],
    'paginationSelector'    =>  '.list-view.' . $dataProvider->pagination->params['type'] . ' .pagination',
    'itemSelector'          =>  '.hovered',
    'autoStart'             =>  false,
    'containerSelector'     =>  '.list-view.' . $dataProvider->pagination->params['type'] . ' .items-grid',
    'nextSelector'          =>  '.list-view.' . $dataProvider->pagination->params['type'] . ' .pagination .next a:first',
    'pluginOptions'         =>  [
        'loadingText'   =>  '',
    ],
],
'summary'       =>  false

]);

Дальше по кнопке я осуществляю подгрузку товаров следующим кодом

$('body').on(hasTouch ? 'touchend' : 'click', '.ias-trigger', function(e){
    if(hasTouch && isTouchMoved(e)){ return false; }
    e.preventDefault();
    $(this).parents('.items-grid').infinitescroll('start').infinitescroll('retrieve');
});

$('body').on('.items-grid infinitescroll:afterRetrieve', function(){
    $('.list-view').infinitescroll('stop');
});

Для одного ListView работает шикарнейше, без запинки. А вот для большего количества не хочет. Проблема в том, что после последней инициализации пейджера в яваскрипте

    init: function (params) {
        options = $.extend(true, {}, defaults, params);
        var data = $(this).data(name);

        if (data) {
            return this;
        } else {
            object = this;
            if (!options.state.isPaused) {
                methods.start();
            }
            return this;
        }

    },

Объект и опции остаются для последнего пейджера, потому, какую бы кнопку я не нажал -- срабатывает подгрузка товаров для последнего блока =(

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions