Question

I have a grid using CGridView and when ever I am trying to update it I get this error. trying a way to resolve this for a long and still couldn't get it worked. I am not sure what am I missing.

following is what I am using to force the grid to refresh when a button click occurs.

$('#sessions .refreshdata').live('click', function(e) {
   e.preventDefault();
   $.fn.yiiGridView.update('sessions-grid');
}
);

The error comes is,

TypeError: settings is undefined

$grid.addClass(settings.loadingClass);

I have no idea from where this triggers.

enter image description here

EDIT 1,

I tried with setting process output true and then it worked but it messed with my UI and other needed scripts in the same page.

$this->getController()->renderPartial('sessionGrid', $params, false, true);

I started getting yii's default gridview and its styles. confused why this happens.

Sorting also doesn't work in the same grid. When I click on a sorting link of a column name, it refresh the page and takes me to another page. so Ajax is completely not working in this case.

EDIT 2,

Below way also dint work as suggested in ANSWER 1

console.log('came in');
e.preventDefault();
$.fn.yiiGridView({ 'ajaxUpdate':['sessions-grid'] }); 
console.log('came out');

how can I force this grid to refresh or update ?

EDIT 3,

When I use the normal way, an error comes up from jquery.yiigridview.js. settings is undefined - Line 203.. $grid.addClass(settings.loadingClass);

return this.each(function () {
var $form,
$grid = $(this),
id = $grid.attr('id'),
settings = gridSettings[id];
$grid.addClass(settings.loadingClass); 

EDIT 4, I am here below copying the cgridview code and action.

<?php TK::registerCssFile('grid');?>
<div id="sessions">
<h4><?php echo Yii::t('activity', (isset($model->activity->name) ? $model->activity->name . ' Sessions'  : 'Sessions')) ?></h4>
<?php $this->beginContent('application.views.templates.form', array('options'=>array('id'=>'sessions-form'))); ?>
<?php echo CHtml::hiddenField('activities_id', $model->activities_id); ?>
<?php echo CHtml::hiddenField('source', $source); ?>
<?php
$this->widget('application.components.SGridView', array(
   'id'=>'sessions-grid',
   'dataProvider'=>$model->search(),
   'filter'=>$model,
   'emptyText'=>(!empty($model->activities_id)) ? 'No results found.' : 'Please select activity from top grid.',
   'showNew'=>(!empty($model->activities_id) &&  Yii::app()->user->checkAccess("piActivitySessionsCreate") && $model->activity->source === 'iJOB') ? true : false,
   'newButtonCss'=>'new dialog-link-session',
   'createUrl'=>Yii::app()->controller->createUrl("/activities/default/sessionCreate", array("activities_id"=>$model->activities_id)),
   //'showExport'=>true,
   'columns'=>array(
      /*
      array('type'=>'raw',
         'value'=>'CHtml::hiddenField("ActivitySession[$data->id]", false, array(\'value\'=>$data->id))',
         'htmlOptions'=>array('style'=>'width:0%;'),
         'headerHtmlOptions'=>array('style'=>'width:0%;')),
      */      
      array('name'=>'site_id',
         //'value'=>'CHtml::link($data->sites->code, "#", array("title"=>$data->sites->name))',
         //'value'=>'CHtml::label($data->sites->code, null, array("title"=>$data->sites->name))',
         'value'=>'$data->sites!=null ? CHtml::tag("div", array("title"=>$data->sites->name), $data->sites->code) : ""',
         'type'=>'raw',
         'htmlOptions'=>array('style'=>'width:16%;'),
         'headerHtmlOptions'=>array('style'=>'width:16%;')),
      array('name'=>'location',
         'htmlOptions'=>array('style'=>'width:30%;'),
         'headerHtmlOptions'=>array('style'=>'width:30%;')),
      array('name'=>'start_time',
         'value'=>'Yii::app()->dateFormatter->formatDateTime($data->start_time, "medium", "short")',
         'htmlOptions'=>array('style'=>'width:15%;'),
         'headerHtmlOptions'=>array('style'=>'width:15%;')),
      array('name'=>'end_time',
         'value'=>'Yii::app()->dateFormatter->formatDateTime($data->end_time, "medium", "short")',
         'htmlOptions'=>array('style'=>'width:15%;'),
         'headerHtmlOptions'=>array('style'=>'width:15%;')),
      /*
      array('name'=>'max_positions',
         'htmlOptions'=>array('style'=>'width:6%;'),
         'headerHtmlOptions'=>array('style'=>'width:6%;')),
      */
      array('name'=>'closed',
         'value'=>'$data->closed == "1" ? Yii::t("activity", "Yes") : Yii::t("activity", "No")',
         'filter'=>array("0"=>Yii::t("activity", "No"), "1"=>Yii::t("activity", "Yes")),
         'htmlOptions'=>array('style'=>'width:6%;text-align:left;'),
         'headerHtmlOptions'=>array('style'=>'width:6%;')),
      array('name'=>'registered',
         'type'=>'raw',
         'value'=>'$data->registeredCount . \'/\' . $data->max_positions',
         'filter'=>false,
         'sortable'=>true,
         'htmlOptions'=>array('style'=>'width:8%;text-align:right;padding-right:15px'),
         'headerHtmlOptions'=>array('style'=>'width:8%;')),
      array('class'=>'CButtonColumn',
         'template'=>'{users} {view} {update} {delete}',
         'header'=>Yii::t("activity","Actions"),
         'headerHtmlOptions'=>array('style'=>'width:10%;'),
         'htmlOptions'=>array('style'=>'width:10%;'),
         'buttons'=>array(
            'users'=>array(
               'visible'=>'(Yii::app()->user->checkAccess("piActivityJobseekerRead") || Yii::app()->user->checkAccess("piActivityJobseekerUpdate")) ? true : false',
               'url'=>'Yii::app()->controller->createUrl("/activities/participants/index", array("session_id"=>$data->id))',
               'imageUrl'=>Yii::app()->request->baseUrl.'/images/base/users.png',               
               'options'=>array(
                  //'class'=>'users dialog-link-session',
                  'title'=>Yii::t('activity', 'Participants'),
               ),
            ),
            'view'=>array(
               'visible'=>'(Yii::app()->user->checkAccess("piActivitySessionsRead") && 
                  !Yii::app()->user->checkAccess("piActivitySessionsUpdate") && $data->activity->source === "iJOB") ||
                  ($data->activity->source === "ESS") ? true : false',
               'url'=>'Yii::app()->controller->createUrl("/activities/default/sessionView", array("id"=>$data->id))',
               'options'=>array('class'=>'view dialog-link-session'),
            ),
            'update'=>array(
               'visible'=>'(Yii::app()->user->checkAccess("piActivitySessionsUpdate") && $data->activity->source === "iJOB") ? true : false',
               'url'=>'Yii::app()->controller->createUrl("/activities/default/sessionUpdate", array("id"=>$data->id))',
               'options'=>array('class'=>'update dialog-link-session'),
            ),
            'delete'=>array(
               'visible'=>'(Yii::app()->user->checkAccess("piActivitySessionsDelete") && $data->activity->source === "iJOB") ? true : false',
               'url'=>'Yii::app()->controller->createUrl("/activities/default/sessionDelete", array("id"=>$data->id))',
               'options'=>array('class'=>'delete dialog-link-session'),
            ),
         ),
      ),
      array('type'=>'raw',
         'value'=>'$data->registeredCount',
         'htmlOptions'=>array('style'=>'display:none;'),
         'headerHtmlOptions'=>array('style'=>'display:none;'),
      ),
   ),
));
?>
<?php $this->endContent(); ?>
</div>
<style type="text/css">
.grid-view-body
{
    height: 170px;
}
</style>

AND in action....

public function run()
   {
      Yii::app()->clientScript->scriptMap['*.js'] = false;
      $activities_id = (TK::get('activities_id') ? TK::get('activities_id') : (TK::post('activities_id') ? TK::post('activities_id') : 0));
      $source = (TK::get('source') ? TK::get('source') : (TK::post('source') ? TK::post('source') : 'iJOB'));
      
      if ($activities_id === null)
        throw new CHttpException(500, Yii::t('activity', 'The requested activity does not exist.'));
      
      $model = new ActivitySession('search');
      $model->unsetAttributes();
      $model->activities_id = $activities_id;
      $model->closed = null;     
      
      if (isset($_GET['ActivitySession']))
         $model->attributes = $_GET['ActivitySession'];
         
      $params = array('model'=>$model, 'source'=>$source);
      
      if (Yii::app()->request->isAjaxRequest)
         $this->getController()->renderPartial('sessionGrid', $params, false, true);
      else
         $this->getController()->renderPartial('sessionGrid', $params, false, true);
   }

Then the I have the gridview as below along with the refresh button...

enter image description here

After making porcessedOutput = true, the refreshed start working but every time it increases by one.. so refresh now occurs multiple time.. below is a capture of it happened 3 times now. enter image description here

How can I stop this refreshing happening multiple time is my question.

Was it helpful?

Solution

just an ideea, try

$('#sessions .refreshdata').live('click', function(e) {
   e.preventDefault();
   $.fn.yiiGridView({ 'ajaxUpdate':['sessions-grid']  });
);

hope this helps

can you show the cgridview in here please. the problem might be how you set it up

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top