【发布时间】:2015-12-10 17:52:56
【问题描述】:
我尝试在 GridView-widget 中定期(5 秒)更新某些列,但这会更新所有页面
查看
<?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(); ?>
如何只更新某些列而不重新加载所有页面?有正确的方法吗?
【问题讨论】:
-
你有两个 'state-dependence' 的 id,这可能会令人困惑,因为 id 应该对每个元素都是唯一的。尝试重命名其中一个,然后看看它是否有效。
-
我测试了 1 行 1 列的唯一 ID。结果是一样的——页面被完全重新加载。
-
好的,我们已经消除了它!还有一个问题,$(module).ready(function() 中的模块是干什么用的?通常是 $(document).ready(function()
-
另外,您是否检查过 pjax 请求的 url 正确,并且没有抛出任何错误?
-
'module' - 它是 yii2 类 GridView。 (在 html 中它是一个 div)