После некоторой игры я думаю, что нашел решение.
Проблема в том, что rails.js
использует serializeArray()
для элемента form
, содержащего элемент управления submit
, по которому щелкнули;но сериализованные данные формы не содержат этого элемента управления.Тем не менее, JQuery или Javascript отслеживают исходное событие в цепочке вызовов, которое технически было событием "submit" в соответствующем элементе управления.
Поэтому я отредактировал rails.js следующим образом:
callRemote: function (e) { /* Note - new parameter e */
var el = this,
method = el.attr('method') || el.attr('data-method') || 'GET',
url = el.attr('action') || el.attr('href'),
dataType = el.attr('data-type') || 'script';
if (url === undefined) {
throw "No URL specified for remote call (action or href must be present).";
} else {
if (el.triggerAndReturn('ajax:before')) {
var data = el.is('form') ? el.serializeArray() : [];
/********************/
/* Note new if-test */
/********************/
if (e)
{
data.push({name: e.originalEvent.explicitOriginalTarget.name,
value: e.originalEvent.explicitOriginalTarget.value})
}
/* Function continues as before */
... и далее вниз ...
$('form[data-remote]').live('submit', function (e) {
$(this).callRemote(e);
e.preventDefault();
});
Это приводит к добавлению пары имя-значение нажатой кнопки перед запуском AJAX.
Я немного новичок в Javascript, поэтому дайте мне знать, если что-то из этого ужасно неправильно!