yii2 pjax gridview问题

时间:2016-05-24 17:04:13

标签: caching gridview yii2 pjax

我在yii2高级版中使用gridview和pjax。当我添加/更新/删除任何记录时,pjax加载页面的第一个html。例如,我删除一条记录后有10条记录应该有9条记录,但它仍然会加载10条记录,即使你删除了所有记录,这仍然会继续。同样适用于添加和更新。

但是如果我点击F5然后它会加载从数据库表中获取的实际记录,如果我再次执行任何操作,那么它会再次显示10条记录。

以下是带有Pjax的Gridview代码

$this->registerJs("$('.js-delete').on('click', function(e) {
    ajax_actions(this, true, {
        'pjax_container': '#products-grid'
    });
    return false;
});");

Pjax::begin([
    "id" => "products-grid",
    "enablePushState" => false
]);

echo GridView::widget([
    'dataProvider' => $dataProvider,
    "summary" => '',
    "rowOptions" => function($model) {
        if($model->status == Common::STATUS_INACTIVE)
        {
            return ["class" => "inactive"];
        }
    },
    'columns' => [
        [
            "class" => 'yii\grid\SerialColumn',
            "headerOptions" => [
                "class" => 'hidden-480'
            ],
            "contentOptions" => [
                "class" => 'hidden-480'
            ]
        ], [
            "attribute" => "title",
            "label" => "Product"
        ], [
            "attribute" => "companies_id",
            "label" => "Companies",
            "value" => "companies.title"
        ], [
            "attribute" => "product_types_id",
            "header" => "Category",
            "value" => "productTypes.title"
        ], [
            "attribute" => "part_number",
            "header" => "<span class=\"hidden-360\">Part </span>Number"
        ], [
            "attribute" => "created_on",
            "label" => "Added On",
            "format" => ["date", "php:" . Common::DATETIME_FORMAT_DISPLAY],
            "headerOptions" => [
                "class" => 'textRight hidden-360'
            ],
            "contentOptions" => [
                "class" => 'textRight hidden-360'
            ]
        ], [
            "class" => 'yii\grid\ActionColumn',
            "header" => "Actions",
            "headerOptions" => [
                "class" => "textRight actions"
            ],
            "contentOptions" => [
                "class" => "textRight actions"
            ],
            "template" => "{view} {edit} {delete}",
            "buttons" => [
                'view' => function($url, $model) {
                    return Html::a('<i class="' . Common::ICON_VIEW . '"></i> <span class="hidden-640">View</span>', ['view', 'token' => $model->token], ["class" => "call-ajax"]);
                },
                'edit' => function($url, $model) {
                    return Html::a('<i class="' . Common::ICON_EDIT . '"></i> <span class="hidden-640">Edit</span>', ['update', 'token' => $model->token], ["class" => "call-ajax"]);
                },
                'delete' => function($url, $model) {
                    return Html::a('<i class="' . Common::ICON_DELETE . '"></i> <span class="hidden-640">Delete</span>', ['delete', 'token' => $model->token], [
                        'class' => 'js-delete'
                    ]);
                }
            ]
        ]
    ]
]);

Pjax::end();

功能

function ajax_submit(element, pjax_container)
{
    var form = $(element);

    if(form.find('.has-error').length) return false;

    $.post(form.attr('action'),form.serialize()).done(function(result){
        var result = JSON.parse(result);

        if(result.type=='error')
        {
            result.container = '.error-container';
            messages(result)
        }
        else
        {
            if(pjax_container) $.pjax.reload({container: pjax_container});

            $('.overlay').click();

            result.container = '.message-container';
            messages(result);
        }
    });

    return false;
}

function ajax_actions(element, ask_me, params)
{
    if(ask_me == true && ask() == false)
    {
        return false;
    }

    var $this = $(element);
    var $params = {
        callBacks: {
            beforeSendAfter: function() {},
            completeAfter: function() {}
        }
    };

    if(params != undefined) $.extend(true, $params, params);

    $.ajax({
        type: 'POST',
        url: $this.attr("href"),
        cache: false,
        beforeSend: function() {
            if($params.callBacks.beforeSendAfter != undefined && $.isFunction($params.callBacks.beforeSendAfter)) $params.callBacks.beforeSendAfter();
        },
        success: function(response) {},
        complete: function(response) {
            var result = $.parseJSON(JSON.parse(response.responseText));

            if(result.type=='error')
            {
                result.container = '.error-container';
                messages(result)
            }
            else
            {
                result.container = '.message-container';

                $('.overlay').click();
                $.pjax.reload({container: $params.pjax_container});

                messages(result);
            }

            if($params.callBacks.completeAfter != undefined && $.isFunction($params.callBacks.completeAfter)) $params.callBacks.completeAfter();
        }
    })

    return false;
}

0 个答案:

没有答案