Здравствуйте, при изучении Yii столкнулся со следующей проблемой.
Дано:
На странице есть ListView с отображаемыми записями. У каждой записи есть ajax кнопка рейтинга - по первому нажатию добавляется голос, по второму этот голос забирается.
В боковом меню есть форма фильтрации но нескольким критериям. Запрос из формы идет через ajaxSubmitButton.
Проблема:
Поиск записей проходит правильно, вывожу view через renderPartial, processOutput = true, т.е. все скрипты на отображаемой странице работают корректно, но
а. Если после поиска записей по критериям на первую страницу попадает запись, которая до поиска была на первой странице, кнопка рейтинга отправляет два ajax запроса(срабатывает скрипт который был изначально на странице, а также из фрагмента добавленным черехз ajax);
b. если перейти на вторую или более страницу используя постраничную навигацию, то на странице корректно работают все скрипты, кроме кнопки рейтинга(не отправляет запрос);
Ели вопрос кажется глупым, не кидайтесь тапками, я всего лишь учусь.
Спасибо.
Проблему с дублированием запросов решил путем добавления к кнопке рейтинга htmlOptions параметра 'live' => false.
Остается только работа на второй и более странице. Если в ListView установить 'updateAjax' => fasle, то ни один из скриптов не загрузится и страница отобразится некорректно и с ошибками, а также т.к. ajax запрос с формы поиска идет через GET, при переходе на следующую страницу все параметры из формы идут в адресную строку, даже если некоторые пустые.
[РЕШЕНО]ajaxButton
[РЕШЕНО]ajaxButton
Последний раз редактировалось Whirpool 2013.12.06, 18:38, всего редактировалось 2 раза.
Re: ajaxButton
При обновлении грида или списка все надо навешивать через on или не использовать ajax обновление.
Re: ajaxButton
сейчас стоит на кнопке рейтинга:
а если установить ajaxUpdate в false у ListView, то не запускаются никакие скрипты и страница загружается не корректно
Код: Выделить всё
jQuery('body').on('click','#ratingBtn_105',function(){jQuery.ajax({'type':'POST','data':{'id':'105'},'cache':false,'dataType':'json','success':function(result){
$("#rating_105").html(result[0]);
$("#ratingBtn_105 i:first-child").attr({"class":result[1]});
},'url':'/index.php?r=posts/ajaxRating'});return false;});
- flashimage
- Сообщения: 1517
- Зарегистрирован: 2011.01.23, 12:43
Re: ajaxButton
перепишите так и все будет ок
Код: Выделить всё
jQuery('#ratingBtn_105').on('click',function(){jQuery.ajax({'type':'POST','data':{'id':'105'},'cache':false,'dataType':'json','success':function(result){
$("#rating_105").html(result[0]);
$("#ratingBtn_105 i:first-child").attr({"class":result[1]});
},'url':'/index.php?r=posts/ajaxRating'});return false;});
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
Re: ajaxButton
обнаружил, что при отображении результата запроса из формы, на первой странице js код выглядит так, как я указал ранее.
При перемещении по страницам в ajax контенте js код выглядит так, как указали Вы.
Вот код кнопки рейтинга, ели он нужен:
Спасибо.
При перемещении по страницам в ajax контенте js код выглядит так, как указали Вы.
Вот код кнопки рейтинга, ели он нужен:
Код: Выделить всё
$this->widget('bootstrap.widgets.TbButton', array(
'buttonType' => 'ajaxButton',
'size' => 'small',
'icon' => ($data->checkVote($data->id)) ? 'icon-thumbs-down' : 'icon-thumbs-up',
'url' => $this->createUrl('posts/ajaxRating'),
'ajaxOptions' => array(
'type' => 'POST',
'data' => array('id' => $data->id),
'cache' => false,
'dataType' => 'json',
'success' => 'js:function(result){
$("#rating_' . $data->id . '").html(result[0]);
$("#ratingBtn_' . $data->id . ' i:first-child").attr({"class":result[1]});
}',
),
'htmlOptions' => array(
'id' => 'ratingBtn_' . $data->id,
'live' => false,
)
)
);
- flashimage
- Сообщения: 1517
- Зарегистрирован: 2011.01.23, 12:43
Re: ajaxButton
до вывода листа
CHtml::$liveEvents=false
CHtml::$liveEvents=false
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
Re: ajaxButton
Я так понял, это исправление дублирования запросов?flashimage писал(а):перепишите так и все будет ок
Спасибо, но я уже решил этот вопрос добавив в htmlOptions 'live' => false.
Осталась проблема игнорирования события для кнопки рейтинга, во второй и последующих страницах.
Спасибо.
Re: ajaxButton
Проблема решена.
переделал из ajaxButton в button и написал на js один обработчик для всех кнопок, теперь код страницы стал чище и все функционирует как надо. Спасибо за советы.
переделал из ajaxButton в button и написал на js один обработчик для всех кнопок, теперь код страницы стал чище и все функционирует как надо. Спасибо за советы.