2015-03-17 2 views
0

http://www.yiiframework.com/doc-2.0/guide-caching-fragment.htmlYii2 Кэширование фрагмента для GridView

Мой код:

$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 не работает, потому что нужно GridView расслоение плотной. Как исправить?

UPD: добавить перед тем кэшем код:

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

Это работает, но как отслеживать нагрузку кэша?

ответ

0

Интересное одно :), попробуйте иметь else после того, если это зарегистрировало бы необходимый JS. Поэтому, если ваши зависимости не сработают, вы включаете GridView, если они не подведут, у вас есть HTML с включенным JS-файлом, чтобы он работал.

+0

Я пробовал, но сценарий js является динамическим. См. Https://github.com/yiisoft/yii2/blob/master/framework/grid/GridView.php#L281. Я попробовал '$ ('# table-connection'). YiiGridView ('applyFilter');' но получить ошибку с соответствующими параметрами begin init ... Легче отключить кеширование и перейти в другую сторону. Но это не решение :) –

+0

Я обновил вопрос. –

+0

Я не уверен, что получаю ваш обновленный вопрос. –

0

registerJs, это выполнить в Gridview функции «Выполнить()» может быть, вы можете seprate GridView, как показано ниже:

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

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

В моем случае я только включить сортировку в GridView, это работает для меня.

Смежные вопросы