jquery.yiigridview.js баг с URL в $.fn.yiiGridView.update

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
Аватара пользователя
BuCeFaL
Сообщения: 447
Зарегистрирован: 2010.03.17, 21:22
Откуда: Kiev
Контактная информация:

jquery.yiigridview.js баг с URL в $.fn.yiiGridView.update

Сообщение BuCeFaL »

Не корректная работа с url у $.fn.yiiGridView.update при GET запросах.
Есть фильтры в виде чек боксов, они сериализуються и отправляються через GET метода yiiGridView.update на сервер, тот отдает результат с тегом div.keys title которого содержит URL, очевидно что URL с нашими параметрами которые получились в результате манипуляций с фильтром и последующей сериализации. Метод getUrl вызывает с div.keys для следующего ajax запроса, если ему явно не был указан другой url.
Теперь баг:

Код: Выделить всё

//...
        if(options.data!==undefined && options.type=='GET') {
            options.url = $.param.querystring(options.url, options.data);
            options.data = {};
        }
//...
 
options.url , как уже говорилось выше, это содержимое div.keys title, который содержит параметры с прошлого запроса. А значит, если в текущем ajax запросе нету параметра который был в прошлом, то текущий запрос дополниться прошлым. примерно так:

Код: Выделить всё

options.url = $.param.querystring('http://some/path?foo[]=7', 'bar[]=8'); //http://some/path?foo[]=7'&bar[]=8' хотя в данных к запросу foo не было
 
Костыль:
Перед отправлением данных на сервер, получить URL (который еще не изменялся) и передать его явно.

Код: Выделить всё

    var defaultUrl;
    function filterChanged(event){
        if(undefined == defaultUrl){
            defaultUrl=$.fn.yiiGridView.getUrl('some-grid');
        }
    $.fn.yiiGridView.update('some-grid', {
            url: defaultUrl,
       data: $(event.target).parents('form').serialize()
    });
}
 

Аватара пользователя
BuCeFaL
Сообщения: 447
Зарегистрирован: 2010.03.17, 21:22
Откуда: Kiev
Контактная информация:

Re: jquery.yiigridview.js баг с URL в $.fn.yiiGridView.upda

Сообщение BuCeFaL »

А еще лучше просто POST'ом слать

Аватара пользователя
BuCeFaL
Сообщения: 447
Зарегистрирован: 2010.03.17, 21:22
Откуда: Kiev
Контактная информация:

Re: jquery.yiigridview.js баг с URL в $.fn.yiiGridView.upda

Сообщение BuCeFaL »

Наткнулся на ту же ошибку. Но в профиль.
Казалось бы простая кнопка очистить фильтры по нажатию на которую поля фильтров в гриде очищались бы. Успешно расширил одну из колонок CDataColum в фильтре которой выводиться кнопка, по клику на которую происходит очищение. Все банально. Но после обновления грида фильтры устанавливались в старое значение.
Почему ?
Как я уже писал, в div.kets["title"] храниться адрес с предыдущего запроса с параметрами фильтров (ccgridview почему то передает их get способом, наверное это связано с пагинацией). К этому адресу добавляются значения фильтров.
Выходит к фильтрам старого запроса добавляются фильтры нового запроса, а не заменяются и если в новом запросе не указан один фильтров но дополниться значением и старого запроса.
Временное решение проблемы, вырезать параметры из div.kets["title"] .

Код: Выделить всё

class ECheckBoxColumn extends CCheckBoxColumn
{

   public function init()
   {
       parent::init();

       Yii::app()->getClientScript()->registerScript('grid-column-clear-button',"
             $('.grid-column-clear-button').die().live('click', function() {
                $(this).closest('.filters').find('input, select').val('');

                var keys = $('#{$this->grid->id}').find('.keys');
                var url = keys.attr('title');
                url = url.split('?');
                url = url[0];
                keys.attr('title',url);

                $.fn.yiiGridView.update(" . CJavaScript::encode($this->grid->id) . ",{data: false});
                $(this).hide();
            });
       ");
   }

    protected function renderFilterCellContent()
    { //render 
   }
}
 

kukuruku
Сообщения: 1311
Зарегистрирован: 2011.02.14, 11:36

Re: jquery.yiigridview.js баг с URL в $.fn.yiiGridView.upda

Сообщение kukuruku »

интересно баг будет чиниться или нет? год прошел
столкнулся с той же фигней

Skia
Сообщения: 1
Зарегистрирован: 2013.01.10, 15:46

Re: jquery.yiigridview.js баг с URL в $.fn.yiiGridView.upda

Сообщение Skia »

Такой код обнуляет старые данные фильтров и сохраняет сортировку

if (options.data !== undefined && options.type === 'GET') {
var myRe = /\w*_sort.\w*.\w*.\w*-grid/;
var myArray = myRe.exec(options.url);
if(options.url.length>location.pathname.length+20)
{
options.url = location.pathname + '/index/' +myArray;
options.url = $.param.querystring(options.url, options.data);
}
else
{
options.url = $.param.querystring(options.url, options.data);
}
options.data = {};
}

Аватара пользователя
r3verser
Сообщения: 195
Зарегистрирован: 2012.04.01, 17:29
Откуда: Киев

Re: jquery.yiigridview.js баг с URL в $.fn.yiiGridView.upda

Сообщение r3verser »

Skia спасибо за фикс, работает.
Вообще странно, что такая вроде стандартная функция столько лет не пофикшена, час промаялся, бред.

Аватара пользователя
yiijeka
Сообщения: 3091
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: jquery.yiigridview.js баг с URL в $.fn.yiiGridView.upda

Сообщение yiijeka »

А на гит пробовали писать?

Ответить