В версиях Rails, предшествующих 5.1, в которых использовалось jquery_ujs
, мы могли заменить всплывающее окно подтверждения браузера своим собственным путем переопределения $.rails.allowAction
, как объяснено здесь.
Начиная с Rails 5.1+, где используется rails-ujs
, $.rails.allowAction
больше недоступен. Как мы можем переопределить подтверждение по умолчанию в Rails своим собственным в Rails 5, не переключаясь обратно на jquery_ujs
?
Заранее спасибо.
2 ответа
Я не нашел красивый способ настройки rails_ujs, поэтому я пришел с этим обходным путем (используя CoffeeScript):
` ` `
$(document).on 'mousedown', 'a[data-confirm]', (e) ->
e.preventDefault()
link = $(e.target)
message = link.data 'confirm'
modal = $('.modal.confirmation')
modal.find('.content').text(message)
approve = modal.find('.approve')
approve.attr('data-method', link.data('method'))
approve.attr('href', link.attr('href'))
modal.modal('show')
` ` `
Событие Mousedown позволяет моему обработчику событий выполняться первым (оно происходит до события click, которое использует rails_ujs)
Вы можете переопределить его с помощью Rails.confirm
, например, с CoffeeScript:
Rails.confirm = (message, element) ->
# your code
Например чтобы текст подтверждения отображался в течение 2 секунд:
WAITING_CLASS = "waiting-for-confirmation"
TIMEOUT = 2000
Rails.confirm = (message, element) ->
if element.classList.contains(WAITING_CLASS)
true
else
element.dataset.beforeConfirm = element.textContent
element.textContent = element.dataset.confirm
element.classList.add(WAITING_CLASS)
timeout TIMEOUT, ->
element.classList.remove(WAITING_CLASS)
element.textContent = element.dataset.beforeConfirm
false
И timeout
, и просто простая функция, которая инвертирует параметры setTimeout
:
var timeout = function(time, callback) {
setTimeout(callback, time)
}
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.