Предлагается механизм, с помощью которого получен результат. А вот например рекурсия функция ведь вызывает себя неограниченное кол-во раз и это не считается зазорным.
Да, к сожалению проблема лишнего кода имеет место — id диалогового окна, привязка к элементу. При увеличении количества кнопок лишний код. Тем не менее предложенный принцип работает. Предполагаю, что при развитии идеи вполне можно найти решения большинства шероховатостей. Ещё раз говорю, что принцип родился в процессе реализации конкретной задачи и может быть его можно применить не только для диалоговых окон. А Bootbox кто же спорит — безусловно отличный проект.
Добрый день! Да, спасибо! Если бы в своё время его нашёл, скорее всего он и был бы использован. Синтаксис вызова под задачу вполне подходящий. Но тогда придётся ставить в проект Bootstrap. Кроме того в предлагаемой мной реализации имеется полная свобода в оформлении диалогового окна (хоть полностью круглым его сделать), можно добавлять неограниченное кол-во кнопок и прочих элементов управления + шапка. Трёхкнопочное окно кстати в своём проекте использую.
else блок в данном примере отработает 1 раз, т.к. при выборе кнопки «Отмена» повторный клик вообще не запускается. Изначально я разделял результат выбора «Отмена» и «транзитный вызов», но ни в одном из условий мне не понадобилось отмену обрабатывать.
Чтобы «Отмену» обработать пусть она возвращает не 0, а 2 .on('click','.jdCancel', function() {
methods.jdSetAnswer(2,$(this));
});
И придётся жертвовать стандартным синтаксисом вызова.
Например так: switch($(this).jdDialogs('confirm',0,[...])) {
case 0: return;
case 1:
console.log('ok');
break;
case 2:
console.log('canceled!');
break;
default:
}
Или так: var cnf = $(this).jdDialogs('confirm',0,[...]);
if(!cnf) return;
if(cnf == 1) {
console.log('ok');
} else {
console.log('canceled!');
}
Noty.js не подошёл мне по синтаксису вызова (это указано в статье в постановке задачи), к тому же он более тяжеловесный. Речь в статье не о «добавил в свой код готовое решение и забыл», а об описании принципа. Плагин — это просто реализация принципа. Функционала данного плагина для замены диалоговых окон в моём проекте оказалось достаточно. Кстати если в confirm нужно обрабатывать cancel, достаточно разделить ответ 0 на Отмену и «транзитный вызов».
Совершенно верно, «перекликивать». Это ни в коем случае не универсальное решение на все случаи жизни. Для простых случаев, а таких задач думаю большинство, if confirm и alert вполне себе работает.
Для более сложных алгоритмов естественно уже не подходит. Хотя и тут можно найти решение. Например по другому селектору инициировать клик. Здесь сознательно я иду на повторное выполнение кода, поэтому на этот факт придётся оглядываться.
Ещё раз повторяю, найденное решение — для определённой ниши задач.
Вот замена для вашего примера: var project = 'Тестируем';
if($(this).jdDialogs('confirm',1,['Are you ready?',project])) {
$(this).jdDialogs('alert',0,['Yeah!',project]);
}
Или вот так. var project = 'Тестируем';
if($(this).jdDialogs('confirm',1,['Are you ready?',project])) return;
$(this).jdDialogs('alert',0,['Yeah!',project]);
Спасибо за совет! Понятно, что есть новые технологии. Здесь решение несколько другой задачи — чуть-чуть подправить действующий проект согласно заданию. А код тем не менее если можно так сказать всё-таки «блокируется». Выводом в return. Для возобновления кода по выбору в диалоговом окне запускается заново, но то же самое диалоговое окно не генерируется, а возвращается «транзитом» выбор пользователя. В этом суть принципа.
Но если будет использован двойной слэш это уже не будет последовательность типа \xnn.
Одна из задач была расшифровать и сохранить в читабельном виде в файл.
Да, так работает
else блок в данном примере отработает 1 раз, т.к. при выборе кнопки «Отмена» повторный клик вообще не запускается. Изначально я разделял результат выбора «Отмена» и «транзитный вызов», но ни в одном из условий мне не понадобилось отмену обрабатывать.
Чтобы «Отмену» обработать пусть она возвращает не 0, а 2
.on('click','.jdCancel', function() {
methods.jdSetAnswer(2,$(this));
});
И придётся жертвовать стандартным синтаксисом вызова.
Например так:
switch($(this).jdDialogs('confirm',0,[...])) {
case 0: return;
case 1:
console.log('ok');
break;
case 2:
console.log('canceled!');
break;
default:
}
Или так:
var cnf = $(this).jdDialogs('confirm',0,[...]);
if(!cnf) return;
if(cnf == 1) {
console.log('ok');
} else {
console.log('canceled!');
}
Для более сложных алгоритмов естественно уже не подходит. Хотя и тут можно найти решение. Например по другому селектору инициировать клик. Здесь сознательно я иду на повторное выполнение кода, поэтому на этот факт придётся оглядываться.
Ещё раз повторяю, найденное решение — для определённой ниши задач.
var project = 'Тестируем';
if($(this).jdDialogs('confirm',1,['Are you ready?',project])) {
$(this).jdDialogs('alert',0,['Yeah!',project]);
}
Или вот так.
var project = 'Тестируем';
if($(this).jdDialogs('confirm',1,['Are you ready?',project])) return;
$(this).jdDialogs('alert',0,['Yeah!',project]);
Не похоже?