YII2. Как автоматически обновлять (периодически) столбец в GridView?

Я пытаюсь периодически (5 секунд) обновлять некоторые столбцы в виджете GridView, но это обновление всей страницы

Просмотреть

<?php
$script = <<< JS
$(module).ready(function() {
    setInterval(function() {     
      $.pjax.reload({container:'#state-dependence'});
    }, 5000); 
});
JS;
$this->registerJs($script);
?>

<?php Pjax::begin(); ?>
    <?= GridView::widget([ 'id'=>'module',
        'dataProvider' => $dataProvider,
        'layout' => '{items}',
        'tableOptions' => ['class' => 'table table-striped table-bordered'],
        'columns' => [
             'Id', 
             'Title',
             [ 
               'format' => 'raw',
               'value' => function ($model) {
                return Html::tag('span', Html::encode($model::GetStringState($model->State)), 
                                ['id' => 'state-dependence']);
               }
             ],
             [ 
               'format' => 'raw',
               'value' => function ($model) {
                return Html::tag('span', Html::encode($model->Value), 
                                ['id' => 'state-dependence']);
               }
             ]

        ],
    ]); ?>
<?php Pjax::end(); ?>

Как обновить только некоторые столбцы без перезагрузки всей страницы? Есть ли правильный путь?


person Илья Габасов    schedule 10.12.2015    source источник
comment
У вас есть два идентификатора «зависимости от состояния», и это, вероятно, сбивает с толку, поскольку идентификаторы должны быть уникальными для каждого элемента. Попробуйте переименовать один из них и посмотрите, работает ли он.   -  person Joe Miller    schedule 11.12.2015
comment
Я тестировал 1 строку с 1 столбцом с уникальным идентификатором. Результат тот же - страница перезагружается полностью.   -  person Илья Габасов    schedule 12.12.2015
comment
Хорошо, тогда мы устранили это! Еще один вопрос: для чего нужен модуль в $(module).ready(function()? Обычно это $(document).ready(function()   -  person Joe Miller    schedule 12.12.2015
comment
Кроме того, вы проверили, что pjax запрашивает правильные URL-адреса и что ошибок не возникает?   -  person Joe Miller    schedule 12.12.2015
comment
'модуль' - это классы yii2 GridView. (в html это div)   -  person Илья Габасов    schedule 12.12.2015
comment
У меня нет ни одной ошибки. В целом перезагрузка страницы   -  person Илья Габасов    schedule 12.12.2015
comment
Возможный дубликат Yii2: обновление представления сетки с использованием Pjax   -  person Joe Miller    schedule 12.12.2015
comment
Хорошо, я пометил его как дубликат, так как похоже, что на этот сайт уже был дан ответ, см. здесь stackoverflow.com/questions/27777512/   -  person Joe Miller    schedule 12.12.2015


Ответы (1)


Я также столкнулся с этой проблемой некоторое время назад и понял, что когда вы звоните

$.pjax.reload({container:'#gridid'});

Перезагружает всю страницу.

Как я решил эту ошибку: если вы разрабатываете с помощью Google Chrome, проверьте сетку, и вы обнаружите, что

your grid id has an added -pjax

Так что вам нужно позвонить

$.pjax.reload({container:'#gridid-pjax'});
in your case:
 $.pjax.reload({container:'#module-pjax'});
person Geoff    schedule 23.10.2016