Struts 2 jQuery Subscribe вызывается более одного раза

В плагине struts 2 jQuery есть структура публикации/подписки, которую можно использовать для вызова события.

Рассмотрим этот образец....

Можно изменить поведение сетки при загрузке сетки, подписавшись на событие onGridCompleteTopics.

<sjg:grid id="gridtable" dataType="json"
    href="%{url}" gridModel="gridModel" direction="%{pageDir}" width="800"
    shrinkToFit="true" onGridCompleteTopics="grid_compelete">

А потом в js:

    $.subscribe('grid_compelete', function(event, data) {
    //do some thing
}

Проблема в том, что, как указано выше, js и сетка находятся на одной странице (они находятся на одном jsp), каждый раз, когда я перезагружаю страницу, вызывается subscribe, и код в подписке запускается снова.

Как я могу это предотвратить?! Я нашел функцию в jquery.subscribe.1.2.3, которая называется isSubscribed. Я думал, что фреймворк должен использовать ее внутри, чтобы избежать этой проблемы. Но это не так!

Также я не нашел способа вызвать и использовать этот метод.


person Alireza Fattahi    schedule 07.12.2013    source источник


Ответы (4)


каждый раз, когда я перезагружаю страницу, вызывается подписка, и код подписки запускается снова.

Конечно, это стандартное поведение. Если вам нужно, чтобы что-то запускалось только один раз за весь жизненный цикл, вы можете использовать сеанс/куки.

onGridCompleteTopics — это означает, что каждый раз, когда загружается сетка, тема публикуется. И каждый раз, когда страница перезагружается/обновляется, сетка загружается, публикуя событие.

Надеюсь, это развеет ваши сомнения.

person coding_idiot    schedule 07.12.2013
comment
Спасибо. Как узнать, если подписка на эту тему уже сделана! - person Alireza Fattahi; 08.12.2013
comment
как я предложил, вы можете использовать файлы cookie. Получите переменную из файла cookie, если она не найдена, запустите свой код и сохраните переменную в файле cookie. - person coding_idiot; 08.12.2013

Решение было найдено по адресу плагин Struts 2 jQuery isSubscribe не работает

Можно использовать

  $("#gridtable").subscribe('grid_compelete', function(event, data) {
    //do some thing
}

или убей тему (чего я сам не предпочитаю)

 $.subscribe('grid_compelete', function(event, data) {
    //do some thing
    $.destroyTopic('grid_compelete');
}

isSubcibe все еще существует и прикреплен к документу, см. Плагин Struts 2 jQuery isSubscribe не работает для полного кода @Roman C

person Alireza Fattahi    schedule 17.05.2014

У меня была такая же проблема с onEditInlineSuccessTopics и заменой

$.subscribe('grid_compelete', function(event, data) {

с участием

$("#gridtable").subscribe('grid_compelete', function(event, data) {
//do some thing
}

было лучшим решением, которое сработало для меня.

Другая версия, связанная с destroyTopic, заставляла тему работать только в первый раз, когда я редактировал строку, а если я хотел отредактировать другую строку, тема вообще не вызывалась.

person Andreea Hash    schedule 05.12.2014

Просто используйте return false; в конце функции.

$.subscribe('grid_compelete', function(event, data) {
    return false;
});
person Laxman Maurya    schedule 15.12.2015