2013-09-10 4 views
1

У меня есть сетка с использованием CGridView, и когда я пытаюсь ее обновить, я получаю эту ошибку. пытаясь решить эту проблему надолго и все еще не может заставить ее работать. Я не уверен, что мне не хватает.обновление CGridView с ajax не работает

следующее, что я использую, чтобы заставить сетку обновляться при нажатии кнопки.

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

ошибка приходит это,

TypeError: settings is undefined 

$grid.addClass(settings.loadingClass); 

Я понятия не имею, откуда это вызывает.

enter image description here

EDIT 1,

Я попытался с установкой выходной процесс истинный, а затем он работал, но он испортил с моим UI и других необходимых скриптов в одной и той же странице.

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

Я начал получать gridview по умолчанию yii и его стили. путайте, почему это происходит.

Сортировка также не работает в той же сетке. Когда я нажимаю на ссылку сортировки имени столбца, она обновляет страницу и переводит меня на другую страницу. поэтому Ajax полностью не работает в этом случае.

EDIT 2,

Ниже пути также впадина работы, как предложено в ОТВЕТА 1

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

как я могу заставить эту сетку, чтобы обновить или обновить?

EDIT 3,

Когда я использую нормальный путь, ошибка появляется из jquery.yiigridview.js. настройки не определены - строка 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, я здесь ниже, скопировав код cgridview и действие.

<?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> 

И в действии ....

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); 
    } 

Тогда у меня есть GridView, как показано ниже вместе с кнопкой обновления ...

enter image description here

После создания porcessedOutput = true, обновленный старт работает, но каждый раз он увеличивается на единицу .. поэтому обновление теперь происходит несколько раз .. ниже - это захват, который произошел 3 раза. enter image description here

Как я могу остановить это освежающее событие несколько раз, это мой вопрос.

+0

Эта проблема возникает во всех браузерах? –

+0

@ DanielVaquero да, это происходит во всех, и сетка не обновляется нажатием кнопки. PLS проверить отредактированный раздел этого вопроса выше. – dev1234

+0

и сортировка по колонкам работает? –

ответ

1

просто ideea, попробуйте

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

надеюсь, что это помогает

вы можете показать cgridview здесь пожалуйста. проблема может быть в том, как вы его установили

+0

Нет, это не работает. Пожалуйста, проверьте отредактированный раздел 2 выше в вопросе. – dev1234

+0

PLS добавить ваш код cgridview в вопрос, я просто попробовал его на нем работает просто отлично ваш путь и мой. – Tavi

+0

PLS проверить отредактированный раздел 4 выше. – dev1234

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