Действие вызова Yii2 в каждой строке GridView после загрузки страницы - PullRequest
0 голосов
/ 24 апреля 2020

Мне было интересно, могу ли я вызывать действие автоматически через ajax по одному для каждой строки GridView после загрузки страницы.

Все, что я могу сейчас сделать, - это вызвать вызов вручную через кнопку нажмите, уже вернули значение правильно.

Вот мой GridView:

<?php Pjax::begin(['id' => 'payment-list-view-container', 'timeout' => 5000]); ?>
    <?= GridView::widget([
        'id' => 'payment-table',
        'dataProvider' => $dataProvider,
        'resizableColumns' => false,
        'tableOptions' => ['class' => 'table table-striped'],
        'pjax'=>true,
        'pjaxSettings' => [
            'options' => [
                'id' => 'payment-table',
                'enablePushState' => false,
            ],
        ],
        'columns' => [
            [
                'class' => 'kartik\grid\SerialColumn',
                'header' => 'No.',
            ],
            [
                'header' => 'Title',
                'attribute' => 'name',
            ],
            [
                'attribute' => 'date_start',
                'header' => 'Payment Date',
                'value' => function($model){
                    return Yii::$app->formatter->asDatetime($model->payment_date, "php:d F Y");
                }
            ],
            [
                'header' => 'Action',
                'format' => 'raw',
                'value' => function($model) use ($export_type){
                    return Html::a('Open', '',
                        [
                            'data-url'=>'/model/payment/check-status/id/'. $model->id . '?exportType=' . $export_type ,
                            'class'=>'check-payment-status'
                        ]);
                }
            ],
        ],
    ]); ?>
<?php Pjax::end(); ?>

Вот мой js:

<?php
$js = <<<JS
    $(document).ready(function(){

        function checkStatus() {
            $(".check-payment-status").off().on("click", function(e){
                e.preventDefault();
                var url = $(this).attr("data-url");

                $.pjax.defaults.timeout = false;
                $.ajax({
                    url     : url,
                    type   : "post",
                    dataType: 'json',
                    success: function (response) {
                        // do something
                    }, error  : function () {
                        // do nothing
                    }
                });
            });
        }

        checkStatus();
    });
JS;

$this->registerJs($js);

Я думаю, мне нужно использовать что-то вроде этого, но до сих пор не знаю, как это реализовать

$.each($('.check-payment-status'), function (i, el) {
                        //do something
                    });

Так я действительно могу это сделать? Вызывать действие автоматически после загрузки страницы для каждой строки?

1 Ответ

0 голосов
/ 24 апреля 2020

Все, что вам нужно сделать, это вызвать событие нажатия на кнопки.

$(document).ready(function() {
    //bind the click handler
    $('.btn').on('click', function(e) {
        e.preventDefault();
        console.log("Clicked " + $(this).text());
    });
    
    //click each button
    $('.btn').each(function() {
        $(this).trigger('click');
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="#" class="btn">Link 1</a><br>
<a href="#" class="btn">Link 2</a><br>
<a href="#" class="btn">Link 3</a><br>
...