внутри gridview
у меня есть встроенный график на основе css. все работает нормально, пока я что-то не отфильтрую, и gridview не обновится. то css больше не регистрируется внутри сетки. кто-нибудь знает решение? честно говоря, я даже не знаю, что делать в этой ситуации. css не является одной из моих сильных сторон.
это элемент перед ajaxupdate:
Это после обновления ajax
.stat-block .stat-graph {
background: none repeat scroll 0 0 #FFFFFF;
border: 1px solid #D7D7D7;
border-radius: 3px;
margin-right: 10px;
padding: 10px 10px 8px;
text-align: center;
width: auto;
}
насколько я вижу, первый раз, когда создается сетка, css генерирует тег холста, например так
<canvas style="display: inline-block; width: 29px; height: 20px; vertical-align: top;" width="29" height="20"></canvas>
но после обновления ajax и обновления сетки этот тег больше не будет отображаться.
Я пытался поместить данные графика в тег холста, но безуспешно.
вот код сетки:
this->widget('zii.widgets.grid.CGridView', array(
'id' => 'cartuse-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'afterAjaxUpdate' => 'reinstallDatePicker',
'columns' => array(
array(
'id' => 'autoId',
'class' => 'CCheckBoxColumn',
'selectableRows' => '50',
),
// 'id',
array(
'name'=>'client',
'type'=>'raw',
'value'=>'client($data->client)',
'htmlOptions' => array(
'align'=>'center',
//'width'=>'35%'
)
вот функция клиента:
function client($client) {
...
return '<div class="stat-block" id="graph">
<ul>
<li class="stat-graph inlinebar" id="activitate-lunara">
'.$data.'
</li>
<li class="stat-count">
<span>'.$data['0'].'
</span>
</li>
<li class="stat-percent">
<span class="text-info stat-percent">'.$target.'</span>
</li>
</ul>
</div>';
}
Редактировать 1: как рекомендовано в ответе 1, я использовал removeClass() и addClass() для обновления css после обновления ajax. ничего не происходит, тег холста все равно не появится.
я попытался использовать replaceWith() и просто вставить тег холста таким образом, но тогда это затормозит фильтрация.
вот функция переустановки DatePicker
<?php Yii::app()->clientScript->registerScript('re-install-date-picker', "
function reinstallDatePicker(id, data) {
$('#datepicker_min').datepicker({ dateFormat: 'yy-mm-dd',
showOtherMonths: true,
selectOtherMonths: true,
changeYear: true,
changeMonth: true,
});
$('#datepicker_max').datepicker({ dateFormat: 'yy-mm-dd',
showOtherMonths: true,
selectOtherMonths: true,
changeYear: true,
changeMonth: true,
});
$( \"#activitate-lunara\" ).removeClass( \"stat-graph inlinebar\" );
$( \"#graph\" ).removeClass( \"stat-block\" );
$( \"#graph\" ).addClass( \"stat-block\" );
$( \"#activitate-lunara\" ).addClass( \"stat-graph inlinebar\" );
}"); ?>
Редактировать 2:
я не использовал renderPartial в качестве содержимого столбца. просто функция, которая вернула нужный мне контент. после исчерпания всех возможных идей я перешел на renderpartial и с renderpartial + регистрация скриптов/css в partialview и removeclass/addclass теперь все работает нормально.