2013-12-07 3 views
1

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

Рассмотрим этот пример ....

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

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

, а затем в ЯШ:

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

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

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

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

ответ

1

Решение было найдено в Struts 2 jQuery plugin isSubscribe not working

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

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

или убить тему (которую я не предпочитаю это сам)

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

isSubscibe все еще там и он прилагается к документу, пожалуйста, см. Struts 2 jQuery plugin isSubscribe not working для полного кода от @ Roman C

2

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

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

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

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

+0

Спасибо. Как я могу узнать, что подписка на эту тему уже выполнена! –

+0

как я и предложил, вы можете использовать файлы cookie. Получите переменную из файла cookie, если он не найден, запустите ваш код и сохраните var в cookie. –

+0

http://stackoverflow.com/questions/18024539/jquery-cookie-is-not-a-function –

0

Я была такая же проблема для onEditInlineSuccessTopics и замена

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

с

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

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

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

1

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

$.subscribe('grid_compelete', function(event, data) { 
    return false; 
}); 
Смежные вопросы