GridView的Yii2片段缓存

时间:2015-03-17 07:44:39

标签: caching yii2

http://www.yiiframework.com/doc-2.0/guide-caching-fragment.html

我的代码是:

$dependency = [
    'class' => 'yii\caching\DbDependency',
    'sql' => 'SELECT MAX(updated_at) FROM converter_operator_device;',
];

$variations = [
   [\Yii::$app->request->absoluteUrl, \Yii::$app->user->isGuest],
];

if ($this->beginCache('table-connection',['dependency' => $dependency, 'variations' => $variations])) {                        
   // here gridView.
}

当片段缓存时,GridView的过滤器不起作用,因为需要js GridView。如何解决?

UPD: 我在缓存代码之前添加:

$this->registerJs("$('#table-connection').yiiGridView({'filterUrl':document.URL,'filterSelector':'#table-connection-filters input, #table-connection-filters select'})");
GridViewAsset::register($this);

这可行,但如何跟踪缓存加载?

2 个答案:

答案 0 :(得分:0)

有趣的一个:),尝试在if之后注册所需的JS。因此,如果您的依赖项失败,则包含GridView,如果它们没有失败,您将使用包含JS文件的HTML来使其工作。

答案 1 :(得分:0)

registerJs在Gridview函数“run()”中执行 也许你可以像下面这样分割gridview:

$grid = new GridView([
  'layout'=> "{summary}",
]);
echo $grid->run();

if ($this->beginCache('id')) {                        
  echo $grid->renderItems();
  $this->endCache();
}

在我的情况下,我只在gridview中启用排序,它对我有用。