У меня есть поле выбора с различными вариантами.Когда пользователь щелкает поле, чтобы изменить текущий выбор, мне нужно запустить приглашение, чтобы пользователь подтвердил, что он хочет продолжить изменение, поскольку это потребует от него повторного выполнения длительного процесса.Если они отменяют изменения, необходимо предотвратить изменение выбранной опции, поскольку даже быстрое временное изменение вызовет автосохранение на клиенте.Из-за этого кажется, что другие решения не работают, поскольку они сохраняют исходное значение, позволяют изменению пройти и затем возвращают изменение, если необходимо.
Я неКонечно, если это «правильный» подход, но я решил создать функцию, которая будет запускаться каждый раз, когда выбирается поле выбора.Я успешно решил эту проблему, используя собственный метод confirm
в следующем коде.Я полагаю, что это работает, потому что синхронный характер confirm
позволяет мне отменить изменение до того, как оно когда-либо будет получено слушателями событий, так что в принципе это изменение никогда не происходило (пожалуйста, исправьте меня, если я ошибаюсь).К сожалению, я не могу использовать confirm
по причинам совместимости.
// This works, but I need to be able to do it without using 'confirm'
handlePotentialOptionChange(e){
if (this.currentOption !== e.target.value){
if (!confirm(`Are you sure you want to change the option from ${this.currentOption} to ${e.target.value}? You will be required to redo multiple fields.`)){
this.selectModel = this.currentOption // If user cancels the change, revert it to the original option.
}
}
}
Поскольку я не могу использовать confirm
, я использую диалоговый компонент из Buefy .Тем не менее, он работает асинхронно, что означает, что, когда пользователь пытается выбрать другой параметр, изменение параметра произойдет, прежде чем они даже ответят на диалог.Приведенный ниже код вернет изменение в случае отмены, но к этому моменту будет слишком поздно, чтобы быть полезным.
handlePotentialOptionChange(e){
if (this.currentOption !== e.target.value){
this.$dialog.confirm({
message: `Are you sure you want to change the option from ${this.currentOption} to ${e.target.value}? You will be required to redo multiple fields.`,
onConfirm: () => this.selectModel = e.target.value,
onCancel: () => this.selectModel = this.currentOption
})
}
}
Можно ли позволить пользователю видеть раскрывающийся список параметров, но отключать любые изменения параметров, пока не будет получен ответ на запрос, чтобы я мог соответствующим образом изменить параметр внутри асинхронных onConfirm
и onCancel
функций?Или я должен использовать какой-то совершенно другой подход?Спасибо.