Yii: лучшая производительность Выгодный способ включения функций JS/Ajax в CGridview

Новичок в Yii. Я не раз пытался найти способ легко включить функцию Ajax/JS в мой CGRIDVIEW, код в основном

'click'=> "function (){
    $.fn.yiiGridView.update('news-grid', {
    type:'POST',
    url:$(this).attr('href'),
    success:function(data) {
        $('#AjFlash').html(data).fadeIn().animate({
            opacity: 1.0
        }, 3000).fadeOut('slow');

        $.fn.yiiGridView.update('news-grid');
    }
})
return false;

}"

На ваш взгляд, какой самый чистый и эффективный способ включить это? Спасибо за ваше время !!!


person Community    schedule 05.02.2013    source источник
comment
что ты вообще пытаешься сделать? и почему вы звоните $.fn.yiiGridView.update('news-grid'); снова на успех?   -  person Asgaroth    schedule 05.02.2013
comment
Ну, в основном, я вызываю функцию контроллера для обновления значения базы данных и соответственно обновления сетки. Я следовал этому руководству, yiiframework.com/wiki/410/   -  person    schedule 05.02.2013
comment
$.fn.yii... устарел, новый синтаксис $('#news-grid').yiiGridView('update');   -  person Imre L    schedule 05.02.2013
comment
Итак, чтобы перезагрузить только CGridview (а не всю страницу), я могу напрямую использовать эту функцию?   -  person    schedule 11.02.2013


Ответы (1)


Я не знаю, но я не вижу необходимости заставлять сетку обновляться дважды за одну операцию, мне также не нравится включать мой javascript таким образом. В зависимости от того, что мне нужно, есть несколько подходов, ради этого ответа я покажу вам самый простой:

Создайте глобальный объект в отдельном файле:

//app.js
var App = {
  updateSomething: function () {
    $.post(
      $(this).attr('href'),
      success:function(data) {
        $('#AjFlash').html(data).fadeIn().animate({
          opacity: 1.0
        }, 3000).fadeOut('slow');
        $.fn.yiiGridView.update('news-grid');
      }
    );
    return false;
  }
};

И вы можете включить этот файл из своего контроллера, вызвав CCLientScript::registerScriptFile< /а>

Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl."js/app.js");

И в вашей сетке:

'click'=> "js:App.updateSomething",

Есть гораздо лучшие подходы, но это более простой для начинающих js, которые хотят иметь какую-то организацию.

person Asgaroth    schedule 05.02.2013
comment
Спасибо Асгарот за быстрый ответ! Я все еще новичок в JS/AJAX, и здесь я пытаюсь обновить значение с помощью CButtonColumn, в URL-адресе я добавил ссылку на действие контроллера, но теперь я хочу обновить cgridview без необходимости перезагрузить всю страницу. К сожалению, я следовал этому руководству, так как это был единственный, который я нашел. Если вы можете указать мне лучший, более обширный, я буду благодарить вас навсегда! - person ; 06.02.2013
comment
Совершенно точно получилось, спасибо! но страница перезагружается, но, как я уже сказал, я пытался добиться этого полезным способом, когда обновляется только эта сетка. - person ; 08.02.2013