Мой Javascript не совсем до нуля, и я изо всех сил пытаюсь переопределить функцию в поставляемом rails.js
.Как я могу переопределить функции ненавязчивого javascript Rails 3 без изменения поставляемого rails.js?
Я хочу изменить способ обработки a[data-confirm]
с использованием модального диалога jQuery UI, а не ванильного javascript confirm()
.
Соответствующая функция в rails.js
: allowAction(element)
. Если я определяю это в другом файле, я могу вызвать его из консоли firebug успешно, но версия rails.js
по-прежнему вызывается из привязок с атрибутом data-confirm
.
Я думаю, это потому, что все rails.js
файл упаковывается в:
(function($) {
...
})(jQuery);
Есть ли разумный способ отключить эту функцию, без модифицирующих прилагаемого rails.js
?
Edit:
Звонок в rails.js
к allowAction
заворачивают в .live
вызова:
$('a[data-confirm], a[data-method], a[data-remote]').live('click.rails', function(e) {
var link = $(this);
if (!allowAction(link)) return false;
if (link.attr('data-remote')) {
handleRemote(link);
return false;
} else if (link.attr('data-method')) {
handleMethod(link);
return false;
}
});
Я также попытался включая мою JavaScript до и после rails.js
, но безрезультатно.
Edit:
Так что, если я называю .die('click.rails')
я могу затем переопределить все click.rails
событие, но оригинальная handleRemote()
и handleMethod()
функции не называется.
Только что увидел это в Hacker News - хорошая работа! – nfm
Еще лучше, я только что перевел диалог 'confirm' в объект' $ .rails', поэтому еще проще использовать другой диалог подтверждения. См. Обновленный ответ. – jangosteve
Мне было интересно, как вы собираетесь получить доступ к элементу, который вызвал подтверждение, чтобы вы могли настроить диалог на основе этого? –