Поскольку Jquery Mobile сохраняет некоторые страницы в DOM при навигации, страницу можно посетить несколько раз при переходе туда и обратно.
Если я привязываюсь к странице, как показано ниже, и внутри этой привязки выполняю всю логику моей страницы, которая включает «привязки вложенных элементов»:
// listener for the page to show:
$(document).on('pagebeforeshow.register', '#register', function() {
// stuff
// page event bindings:
$(document).on('click.register', '.registerSubmitter', function(e) {
// do something
});
});
Переход туда и обратно приводит к тому, что моя вложенная привязка присоединяется несколько раз.
Прямо сейчас пытаюсь обойти это так (не работает...):
$(document).on('click', '.registrySubmitter', function(e) {
if ( $(this).attr('val') != true ) {
$(this).attr('val') == true;
// do something
}
});
Поэтому я разрешаю только первую привязку, а затем блокирую все последующие попытки привязки.
Хотя это работает, это далеко не оптимально.
Вопрос:
Как и когда привязки событий должны быть правильно развязаны/отключены? Есть ли общий способ (убить всех) или мне нужно делать эту привязку для каждой привязки? Возможно, что более важно: с точки зрения производительности лучше сделать привязку один раз и сохранить ее или привязать/отменить привязку, когда пользователь заходит на страницу или покидает ее?
Спасибо за отзыв!
EDIT:
Итак, я создаю пространство имен для всех своих событий, а затем слушаю pageHide следующим образом:
$(document).on('pagehide.register', '#register', function(){
$(document).off('.registryEvents');
});
Хотя это, кажется, отменяет привязку, оно также срабатывает, когда я закрываю пользовательский диалог/меню выбора на странице, поэтому я теряю свои привязки, прежде чем покинуть страницу. Итак, частичный ответ, я должен использовать off(), но как привязать страницу к действительно оставленной странице по сравнению с открытием и закрытием меню выбора?