Невозможно заставить плагин dirtyforms работать с моделями начальной загрузки 3
В настоящее время мы работаем над веб-приложением среднего размера, реализованным с ASP.NET MVC5 и несколькими библиотеками javascript, такими как jquery, bootstrap 3 и теперь jquery.dirtyforms.
Я просмотрел доступную документацию для предложений о том, как обрабатывать грязную проверку модальных диалогов начальной загрузки, но оказался пустым.
У меня проблема в том, что я не могу найти пуленепробиваемое решение. Было сделано несколько попыток, но все они потерпели неудачу в какой-то момент.
В модальных диалогах есть две кнопки "Закрыть" и "Сохранить" (в некоторых есть и другие кнопки), но только кнопки "Закрыть" должны вызывать грязную проверку. Модальное окно закрывается с использованием стандартного атрибута начальной загрузки data-dismiss="modal".
Самый очевидный способ справиться с этим - подключиться к событию модального скрытия boostrap, например так:
$(document).bind('bind.dirtyforms', function (ev, events) {
var originalBind = events.bind;
events.bind = function (window, document, data) {
originalBind(window, document, data);
$(document).bind('hide.bs.modal', function (d) {
previousTab = d.relatedTarget;
events.onAnchorClick(d);
});
};
});
Я полагал, что событие скрытия вызовет грязную проверку, и это точно произойдет. Но когда я нажимаю кнопку, чтобы проигнорировать ее, модальный режим не закрывается.
Вторая попытка состояла в том, чтобы добавить собственный список событий, как описано выше, но прислушиваться к щелчку на кнопках. Мы создали собственный класс css "dirty-check", который мы добавили ко всем кнопкам, которые мы хотим запустить, и сделали настройку следующим образом:
$(document).bind('bind.dirtyforms', function (ev, events) {
var originalBind = events.bind;
events.bind = function (window, document, data) {
originalBind(window, document, data);
$('.check-dirty').click('click', events.onAnchorClick);
};
});
Теперь мы говорим! Когда нажатие на кнопку с классом dirty-check вызвало dirtycheck и нажатие кнопки "Stay", она осталась, а кнопка "ignore" закрыла модальный режим, как мы и хотели. Однако счастье было недолгим, так как казалось, что оно сработало только в первый раз, когда модал был открыт. При повторном открытии модального режима грязная проверка работает для формы (она устанавливает классы CSS isdirty), но при нажатии кнопки проверка не выполнялась. Почему-то события больше не работают, и мы не можем понять, почему. Мы попытались добавить приведенный выше код в document.ready, чтобы модал посмотрел, поможет ли это, но, к сожалению, нет.
Что я делаю неправильно? Конечно, грязная проверка для модальных диалогов начальной загрузки должна быть одной из наиболее распространенных вещей, которые нужно делать с этой платформой? Мы должны что-то упустить в коде или в нашей настройке. Как правильно использовать эту библиотеку с начальной загрузкой 3?